class Test(models.Model):
name = models.CharField(max_length=100)
class TestToExample(models.Model):
example1 = models.ForeignKey(Test,related_name='example1')
example2 = models.ForeignKey(Test,related_name='example2')
在这里,我可以将example1添加到Test,将示例2添加到Test I,不应该这样做。例1和& 2不应该具有相同的测试值。
答案 0 :(得分:1)
您可以覆盖模型的save()
方法:
class TestToExample(models.Model):
example1 = models.ForeignKey(Test,related_name='example1')
example2 = models.ForeignKey(Test,related_name='example2')
def save(self, force_insert=False, force_update=False,
using=None, update_fields=None):
assert self.example1 != self.example2
# Or:
# if self.example1 == self.example2:
# raise WhateverError
super(TestToExample, self).save(
force_insert=force_insert, force_update=force_update, using=using,
update_fields=update_fields)
这通常会禁止您拥有无效的模型状态(通过bulk_create()
创建实例除外)。如果您通过管理员或模型表单保存实例,最好覆盖模型的clean()
方法,并在那里提出ValidationError
(请参阅documentation)为了提供正确的错误消息而不是内部服务器错误:
class TestToExample(models.Model):
...
def clean(self):
if self.example1 == self.example2:
raise ValidationError('example1 and example2 must be different')
super(TestToExample, self).clean()