2017-11-25 1 views
0

일부는 Container이고, 숫자는 Box입니다. 편집하고 싶습니다. 그래서 당연히 modelformset_factory을 사용합니다.modelformset_factory를 사용하고 객체의 속성에 액세스하십시오.

그것은 아주 좋은 작동합니다

container = get_object_or_404(Container, id=container_id) 
BoxFormSet = modelformset_factory(Box, fields=('a', 'b', 'c')) 
formset = BoxFormSet(queryset=container.box_set.all()) 

를 내가 수정할 상자를 보여 formset 반복 내 템플릿에서.

매우 잘 작동하며 각 Boxa, bc 개를 편집 할 수 있습니다. 그러나 각 상자에는 label도 있습니다. 값에 액세스하여 레이블에 표시하고 싶지만 input -field와 같이 편집 할 수 없습니다. 나는 그저 가치가 필요하다. 어떻게하면 될까요?

+0

을 선호 할 것 같은 그 필드를 설정하는 것입니다. TextInput 위젯이나 자동으로 렌더링되는 항목이 아닙니다. – tjati

+0

업데이트 된 답변보기 그냥 값에 접근하는 것은 매우 쉽습니다.'form.instance'는 각 폼의 모델 인스턴스를 제공합니다. – schwobaseggl

답변

1

widgets 매개 변수를 출고시 허용 할 수 있습니다. 당신이 자동 렌더링, 아직 사용하지 입력을하지 않으려면 그냥 폼의 예를 통해 템플릿의 라벨에 액세스 할 수 있습니다, 또는

BoxFormSet = modelformset_factory(
    Box, 
    fields=('a', 'b', 'c', 'label'), 
    widgets={'label': forms.TextInput(attrs={'readonly': True})} 
) 

: 거기 당신은 레이블 입력에 해당하는 속성을 지정할 수 있습니다 :

{% for form in box_formset %} 
    # form stuff 
    {{ form.instance.label }} 
{% endfor %} 
0

모델에 사용할 양식을 지정하는 것이 좋습니다. 그러면 해당 양식에서 읽기 전용으로하려는 특성을 설정할 수 있습니다.

#forms.py 
class BoxForm(forms.ModelForm): 
    class Meta: 
     model = Box 
     fields=('a', 'b', 'c', 'label') 

    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 
     if self.instance.id: 
      self.fields['label'].widget.attrs['readonly'] = True 

#views.py 
BoxFormSet = modelformset_factory(Box, form=BoxForm) 

대안은 읽기 전용 개인적으로

$('input[name="label"]').attr('readonly', true); 

자바 스크립트

를 사용하여, 내가 원하는 값만이 처음

관련 문제