web-dev-qa-db-ja.com

Djangoモデルの非表示フィールド

しばらく前にModelクラスを作りました。私はそのためにいくつかのModelFormを作成し、それは美しく機能しました。

最近、別のオプション(空白= True、null = True)フィールドを追加して、ユーザー間の関係データを保存する必要がありました。それは本質的に紹介システムです。

問題は、この新しいフィールドを追加することで、ModelFormを変更していない場所に参照フィールドが表示されることです。通常、これはそれらを除外して10分余分に追加することを意味しますが、この場合、私の管理できないプロジェクト管理の方針のため、このアプリケーションのモデルのみを制御できます。

私はどちらか:

  • フィールドを自動除外に設定しますか?
  • 非表示としてレンダリングするように設定しますか(完全でない場合は許容されます)?
29
Oli

のドキュメントからフォームのフィールドのサブセットを使用する

モデルフィールドにeditable = Falseを設定します。その結果、ModelFormを介してモデルから作成されたフォームには、そのフィールドが含まれません。

49
Ofri Raviv

テンプレートにアクセスできる場合は、次のコードを含む非表示フィールドを持つテンプレートをレンダリングできます。

{{ form.field_name.as_hidden }}

標準の代わりに:

{{ form.field_name }}
68

カスタムモデルフィールドサブクラスを定義し、formfield()メソッドをオーバーライドして、HiddenInputウィジェットでフィールドを返すことができます。 カスタムフィールドのドキュメント を参照してください。

4
Daniel Roseman

あなたの場合、除外を使用することはできないとおっしゃっていましたが、この答えに出くわした人(タイトルに基づいた私のように)が役立つと思います。

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',)
    ###.............
1
triforcelink