web-dev-qa-db-ja.com

DjangoモデルとModelFormsでは空白、ヌル、必須

これまでのところ、Djangoのモデルとフォームで、空白、null、および必須についての明確な説明はありません。


それぞれのデフォルトは次のとおりです:

blank = False
null = False
required = True

私も知っています:

blank=True(models.pyで使用)は、フォームレベルで、空のフォームを受け入れることを意味します。関連付けられたフィールドはフォームでは必要ありません。

null=True(models.pyで使用)は、データベースレベルでPython Noneの値をモデルに保存して保存できることを意味します。データベースのSQL NULL値として)。

required=False(forms.pyで使用)、関連付けられたフォームフィールドが不要であることを意味します。


上記の情報が他のユーザーに役立つことを願っています(ロジックに欠陥がある場合はお知らせください。更新します)。

私の質問は次のとおりです:

blank=Truerequired=Falseをいつ使用するかはいつわかりますか。私の目標がフォームフィールドを不要にすることである場合は、blank=Trueを使用してモデルに定義するか、required=Falseを使用してフォームに定義することができます。これは、モデルでblank=Trueを定義でき、関連するModelFormでこれをrequired=Trueでオーバーライドできることを意味しますか?

また、通常のフォーム(forms.Form)を使用している場合はどうですか?フォームはモデルに関連付けられていないので(ビューロジックを介して以外)、再び矛盾するとどうなりますか?

23
Joker

矛盾は関係ありません。これは、Djangoアプリケーションの開発に柔軟性をもたらすと思います。たとえば、いくつかのモデルを定義するサードパーティのライブラリを使用していて、それらがblank=Trueですが、他の目的ではそのフィールドが必須であることを必要とするので、フォームでサードパーティのライブラリコードに触れずに修正できます。

これは、IMHOフレームワークにある程度の柔軟性を追加するだけで、害はありません。あなた自身の目的のためにそれを使用することができます。矛盾は重要ではありません。

お役に立てれば!

13
Paulo Bu

要件によって異なります。後で、フィールドをフォームで必須にすることを決定することがありますが、モデルではまだ必須ではありません。しかし、フォームはフィールドに入力する必要があることを保証します。

あなたが持つことができます null=Trueモデル上で、後でそのフィールドをフォームで必須にすることができます。ただし、モデルで必須であり、後でデータベースエラーが発生する場合は、フィールドをフォームでオプションにすることはできません。

2
Aamir Adnan