我意識到這已被問過,但我沒能找到一個真正處理我想要做的事情的問題。我認爲這很簡單,但我想知道一般人認爲這是最好的形式。Django模型覆蓋保存/使用信號/或使用模型?
比方說,我們有以下幾點:
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的給予用戶 - 如果已經有5 - 如何從保存中退出(不保存) - 我們如何向用戶報告此問題? - 我們在哪裏驗證testfield對象以確保它只有[a-z]?我是否可以導入re,並在此處執行此操作? 應該我?
最好把這一切扔在這裏嗎?我應該發射pre_save信號嗎?或者我應該只使用ModelForm w /驗證?
如果我在管理員中使用它,它是否會覆蓋管理員所做的標準驗證(aka blank = False,正確的日期等)? 另外;如果我想重寫save(),那麼最好的退出方式是什麼?我假設引發一個異常可能是不好的......所以我只是返回False而沒有給出理由? – lostincode 2009-06-05 09:21:10
只要你不重新定義任何實際字段,那麼默認驗證將正常工作。爲了節省,它不需要返回任何東西,所以只需返回就可以了。 – 2009-06-05 09:59:10