しばらく前にModelクラスを作りました。私はそのためにいくつかのModelFormを作成し、それは美しく機能しました。
最近、別のオプション(空白= True、null = True)フィールドを追加して、ユーザー間の関係データを保存する必要がありました。それは本質的に紹介システムです。
問題は、この新しいフィールドを追加することで、ModelFormを変更していない場所に参照フィールドが表示されることです。通常、これはそれらを除外して10分余分に追加することを意味しますが、この場合、私の管理できないプロジェクト管理の方針のため、このアプリケーションのモデルのみを制御できます。
私はどちらか:
のドキュメントからフォームのフィールドのサブセットを使用する :
モデルフィールドにeditable = Falseを設定します。その結果、ModelFormを介してモデルから作成されたフォームには、そのフィールドが含まれません。
テンプレートにアクセスできる場合は、次のコードを含む非表示フィールドを持つテンプレートをレンダリングできます。
{{ form.field_name.as_hidden }}
標準の代わりに:
{{ form.field_name }}
カスタムモデルフィールドサブクラスを定義し、formfield()
メソッドをオーバーライドして、HiddenInputウィジェットでフィールドを返すことができます。 カスタムフィールドのドキュメント を参照してください。
あなたの場合、除外を使用することはできないとおっしゃっていましたが、この答えに出くわした人(タイトルに基づいた私のように)が役立つと思います。
ModelAdminでexclude
を使用してフィールドを選択的に非表示にすることができます。これは私が取り組んでいるものからのスニペットです:
class ItemsAdmin(admin.ModelAdmin):
form = ItemsForm
actions = None
list_display = ('item_id', 'item_type', 'item_title', 'item_size', 'item_color',)
search_fields = ('item_id', 'item_title',)
inlines = [ImageInline,]
readonly_fields = ('disable_add_date','disable_remove_date',)
exclude = ('add_date', 'remove_date',)
###.............