今興味深い問題を解決しようとしています。Django ModelForm Validation
私はimage
フィールドを持つDjangoモデルを持っていますが、これは必須ではありませんが、新しいモデルインスタンスが作成されるとデフォルト値に設定されます。
class Product(models.Model):
image = models.ImageField(upload_to='/image/directory/', default='/default/image/path/', blank=True)
私もimage
フィールドを含むそのモデルに基づいてのModelFormを、持っている、それはいくつかのカスタム検証を持っています。
class ProductForm(forms.ModelForm):
class Meta:
model = Product
fields = ('image',)
def clean_image(self):
image = self.cleaned_data.get('image', False)
if image:
# validate image
return None
問題がModelForm
にis_valid()
を呼び出し、そのper the docsでは、検証を形成するために加えて、モデルの検証をトリガーし、ユーザは画像なしでモデルのフォームを送信するとき、私のカスタムフォーム検証コードは、デフォルトモデルを検証しようイメージではなく、単に何もしていないからです。
フォーム自体にimage
フィールドの値がない限り、何もしないようにするにはどうすればよいですか?
'blank = True'はデータベースレベルでの検証で、' null = True'はモデルレベルでの検証なので、 'null = True'を追加する必要があります。 – karthikr
@karthikr:そうではありません。 'nullは純粋にデータベース関連ですが、空白は検証に関連しています。フィールドにblank = Trueが指定されている場合は、フォームの検証によって空の値が入力されます。フィールドに空白=偽がある場合、そのフィールドは必須です。 [もっと詳しい情報はこちら](https://docs.djangoproject.com/en/dev/ref/models/fields/#blanko) –
@karthikrそれをもう一度確認したいと思うかもしれません。ドキュメントから 'nullは純粋にデータベース関連ですが、空白は検証に関連しています.' https://docs.djangoproject.com/en/dev/ref/models/fields/#field-options –