フォームセットのフィールドの順序を保存したいが、注文フィールドを非表示にする(ユーザーが編集できないようにする)。Django Modelformsetのフィールドの順序を保存する
ドキュメントhereには、add_fieldsメソッドをオーバーライドして注文フィールドの属性を再定義することができます。ここに私のオーバーライドされたクラスは、次のとおりです。
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です。ページから実際の番号を取得するにはどうすればよいですか? –
さらに、 '' order''を 'forms.formsets.ORDERING_FIELD_NAME'に変更してください –