0

次のように、クリーンメソッドでモデルにいくつかの検証を記述しています。

class MyModel(models.Model):
    foo = ....
    bar = ...

    def clean(self):
        (logic that should be applied to all instances of MyModels to validate)

そして、このロジック (ModelForm.clean ではなく) を使用して、MyModel のモデル フォームを検証したいと考えています。私はそれが次のようになると予想しました:

def my_view(request):

    ...

    if request.method == 'POST':
    form = MyModelForm(request.POST)
    try:
        # validate
        form.instance.clean()
        form.instance.save()
    except ValidationError as e:
        validation_error = e # ???

しかし、これはうまくいきません。やりたい理由は2つ

  1. 検証をすべての MyModels に適用したいので、これが最も DRY な方法のようです。
  2. モデル ValidationError のテキストをユーザーに表示したいと考えています。

私はあちこちを見回しましたが、この方法で検証を行う方法の例や説明は見つかりませんでした。私が見落としているより良い方法はありますか?

4

2 に答える 2

1

Model検証を明示的に呼び出す必要はありません。ドキュメントから:

通常のフォーム検証と同様に、is_valid() を呼び出すかエラー属性にアクセスすると、モデル フォーム検証が暗黙的にトリガーされます。モデル検証は、フォーム検証ステップ内からトリガーされます。

したがって、通常の方法でフォームを検証するだけです (ドキュメントまたは Jay の回答を参照してください)。

于 2013-09-10T06:44:38.243 に答える