formset에 필드의 순서를 저장하고 싶지만 주문 필드를 숨김 (예 : 사용자가 편집 할 수 없도록)하고 싶습니다.Django Modelformset의 필드 순서를 저장하십시오.
설명서 here에 따르면 add_fields 메서드를 재정 의하여 주문 필드의 특성을 다시 정의 할 수 있습니다. 여기 내 오버라이드 (override) 클래스 :
class MyBaseFormSet(BaseInlineFormSet):
def add_fields(self, form, index):
super(MyBaseFormSet, self).add_fields(form, index)
form.fields['order'] = forms.HiddenInput()
그리고는 views.py에서 :
는MyFormSet = inlineformset_factory(ModelA,
ModelB,
formset = MyBaseFormSet,
can_order = True)
내 템플릿 파일의 관련 부분 : 페이지를 렌더링 할 때
{{ formset.management_form }}
<tr>
{% for form in formset %}
{% for hidden in form.hidden_fields %}{{ hidden }}{% endfor %}
<td>{% for visible in form.visible_fields %}{{ visible }}{% endfor %}</td>
</tr>
그것은 TemplateSyntaxError를 제기 : Caught AttributeError while rendering: 'HiddenInput' object has no attribute 'label'
오버라이드 된 클래스가 올바르지 않다고 생각하지만 설명서가 도움이되지 않습니다.
을, 나는 [ '순서'] [ 'ORDER']로 변경했고,이 페이지에 렌더링 바르게. 그러나, 내 form.cleaned_data에서 ORDER는 None입니다. 페이지에서 실제 숫자를 어떻게 얻습니까? –
더 나은 점은''주문 ''을'forms.formsets.ORDERING_FIELD_NAME' (으)로 변경하십시오. –