1

モデルがあるとしましょう:

class Ticket(models.Model):
    client = models.ForeignKey(Client)
    color = models.CharField(max_length=255)

    def clean(self):
        self.color = self.client.favorite_color

これを最新の Django (15 分前の SVN の先頭) で実行すると、 を選択せず​​に保存を押すとclient、 (その部分の) DoesNotExistclean メソッド内からエラーが発生します。self.client.favorite_colorモデルにはclient属性が必要なので、カスタム検証の前にこれを処理する必要はありませんclean()か?

私が読んでいるドキュメントは次のとおりです。http://docs.djangoproject.com/en/dev/ref/models/instances/#id1

4

2 に答える 2

1

誰かがこの問題に遭遇した場合、私はそれを理解しました:

モデルの full_clean() では、最初に clean_fields() が実行されますが、表示などのエラーは発生しません。代わりに、単に dict() に追加されてから、モデルのカスタム検証メソッドである clean() に追加されます。カスタムエラーをdictに追加するために実行されます。その後、エラーが再び発生します。

于 2010-01-26T21:00:50.043 に答える
-3

clean()モデルではなく、ModelForms の callable です。

ドキュメントを参照してください。

モデル レベルでやりたいと思われることを行うには、メソッドをオーバーライドしますsave()

コメント後の編集:まあ、1.2 が差し迫っているので、ドキュメントをもう一度読む時が来たようです。:-) ご指摘ありがとうございます。

于 2010-01-26T20:22:39.943 に答える