8

modelformset factory を使用して、モデル フィールドからフォームセットを生成しています。ここでは、クエリセット オブジェクトのみを読み取り専用として、その他の (追加のフォーム) を非読み取り専用フィールドとして作成したいと考えています。

どうすればこれを達成できますか?

  AuthotFormSet = modelformset_factory(Author, extra=2,)
  formset = AuthorFormSet(queryset=Author.objects.all())

上記のフォームセットでは、すべてのクエリセット オブジェクトを読み取り専用として表示し、残りの余分なフォームを非読み取り専用フィールドとして表示したいと考えていました。どうすればこれを達成できますか?

私が使用した場合、

      for form in formset.forms:
          form.fields['weight'].widget.attrs['readonly'] = True

これにより、すべてのフォーム(追加を含む)フィールドが読み取り専用に変換されますが、これは望ましくありません。また、フォームセットにフォームを動的に追加するためにjqueryプラグインを使用しています

4

4 に答える 4

13

モデルに使用するフォームを指定することをお勧めします。そのフォームでは、読み取り専用にする属性を設定できます。

#forms.py
class AuthorForm(forms.ModelForm):
    class Meta:
        model = Author

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

#views.py
AuthorFormSet = modelformset_factory(Author, extra=2, form=AuthorForm)
于 2012-07-03T14:59:56.037 に答える
0

テンプレートに入れることもできます:

{{form.management_form}}
{% for i in form %}
<p>{{ i.instance.readonly_field }}</p>
{{i.as_p}}
{% endfor %}

また、ModelForm.Meta.fields に readonly_field を入れないでください。

于 2021-04-24T12:34:23.697 に答える
-2

私は長い間Pythonを使用していました。これが役立つことを願っています。ただし、jqueryを使用してフィールド表示を制御したい場合

$('.class').attr('readonly', true);

また

$('#id').attr('readonly', true);
于 2012-07-03T14:57:34.723 に答える