说我有个人模型:
class Person(models.Model):
name = models.CharField(max_length=50)
email = models.EmailField()
telephone = models.CharField(max_length=50)
对于每个人,我想确保有联系信息。我不需要电子邮件和电话(虽然两者都可以)但我需要确保提供至少一个。
我知道我可以在表单中查看这些内容,但有没有办法在模型/数据库级别执行此操作以保存重复自己?
答案 0 :(得分:12)
为您的模型编写clean
方法。
from django.core.exceptions import ValidationError
class Person(models.Model):
name = models.CharField(max_length=50)
email = models.EmailField()
telephone = models.CharField(max_length=50)
def clean(self):
if not (self.email or self.telephone):
raise ValidationError("You must specify either email or telephone")
如果您使用模型表单(例如在Django管理员中),Django将为您调用clean
方法。另外,如果您直接使用ORM,可以手动调用实例上的full_clean()
方法。