【发布时间】:2015-05-10 11:57:15
【问题描述】:
我知道有人问过这个问题 here 和 here 和 elsewhere。
...但回答似乎有点不确定。我想也许下面的具体例子可能会引起一些具体的原因,说明这是或不是一个好的策略。
那么,这样做有什么问题呢?排除的字段和默认值似乎工作得很好。某些 ORM 方法不会调用 save(),但您也不会利用 ModelForms。还有什么我想念的吗? 只是向后兼容吗?
from django.db import models
from django.core.exceptions import ValidationError
class Person(models.Model):
favorite_food = models.CharField(max_length=250)
def clean(self, *args, **kwargs):
if self.favorite_food == 'bacon':
raise ValidationError('Bacon is not good for you!')
super(Person, self).clean(*args, **kwargs)
def save(self, *args, **kwargs):
self.full_clean()
super(Person, self).save(*args, **kwargs)
为了 DRY,“胖模型”,至少将验证放在模型中似乎不是一个好的经验法则吗? ...并且仅将验证逻辑移到 ModelForms 中,其中验证上下文可能取决于模型外部的字段,例如 request.user 的权限? (即便如此,如果这很重要,也许他们应该在模型中?)
我真的很喜欢验证 bacon,在一个地方,而不是这里,在 ModelFrom 和再次在管理员表单中......希望听到一些反对这样做的有力论据!
【问题讨论】:
标签: python django django-models django-forms