これまでのところ、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=True
とrequired=False
をいつ使用するかはいつわかりますか。私の目標がフォームフィールドを不要にすることである場合は、blank=True
を使用してモデルに定義するか、required=False
を使用してフォームに定義することができます。これは、モデルでblank=True
を定義でき、関連するModelForm
でこれをrequired=True
でオーバーライドできることを意味しますか?
また、通常のフォーム(forms.Form
)を使用している場合はどうですか?フォームはモデルに関連付けられていないので(ビューロジックを介して以外)、再び矛盾するとどうなりますか?
矛盾は関係ありません。これは、Djangoアプリケーションの開発に柔軟性をもたらすと思います。たとえば、いくつかのモデルを定義するサードパーティのライブラリを使用していて、それらがblank=True
ですが、他の目的ではそのフィールドが必須であることを必要とするので、フォームでサードパーティのライブラリコードに触れずに修正できます。
これは、IMHOフレームワークにある程度の柔軟性を追加するだけで、害はありません。あなた自身の目的のためにそれを使用することができます。矛盾は重要ではありません。
お役に立てれば!
要件によって異なります。後で、フィールドをフォームで必須にすることを決定することがありますが、モデルではまだ必須ではありません。しかし、フォームはフィールドに入力する必要があることを保証します。
あなたが持つことができます null=True
モデル上で、後でそのフィールドをフォームで必須にすることができます。ただし、モデルで必須であり、後でデータベースエラーが発生する場合は、フィールドをフォームでオプションにすることはできません。