私はこれまでに尋ねられたことを理解していますが、私がしようとしていることを実際に扱った質問は見つかりませんでした。私はそれがかなりシンプルだと思いますが、私は一般的な人口がここで一番良いと思うものを知りたいと思います。Djangoモデルはsave/signalを使用してオーバーライドしますか、またはmodelformを使用しますか?
私たちは次のことを考えてみましょう:
models.py
class TestClass(models.Model):
user = models.ForeignKey(User)
testfield = models.CharField()
testbool = models.BooleanField(default=False)
def save(self, *args, **kwargs):
"""
- what we're trying to do here is ensure that the User doesn't have more than
X (lets say 5) related test fields.
- what if we also wanted to add validation to testfield to ensure it was
only [a-zA-Z]?
"""
if TestClass.objects.filter(user=self.user).count() >= 5:
# How do we exit gracefully?
return
super(TestClass, self).save(*args, **kwargs)
保存機能はかなりの合計のコメントまで私の質問: - どのように我々はより存在しないことを確実にするでしょう5つの関連するTestClassを与えるユーザ - すでに保存されている場合は、保存せずに正常に終了するにはどうすればいいですか? - これをユーザにどのように報告しますか? - testfieldオブジェクトが[a-z]のみを持つことを確認するためにtestfieldオブジェクトを検証しますか?私はちょうど再インポートし、ここでそれを行うことはできますか? はですか?
ここにすべてを投げるのが最善でしょうか?私はpre_save信号を発射すべきですか?または、私はちょうどModelFormを使用して/検証を使用する必要がありますか?
私はこれを管理者に使用すると、管理者が行う標準的な検証を上書きしますか(別名ブランク= False、適切な日付など)? また、 save()をオーバーライドしたい場合は、そこから抜ける最善の方法は何ですか?私は例外を発生させることはおそらく悪いと仮定しています...だから、私はちょうどFalseを返すのか、理由を与えないのでしょうか? – lostincode
実際のフィールドを再定義しない限り、デフォルトの検証は通常どおり動作します。保存するために、何も返す必要はないので、返すだけで問題ありません。 –