我的应用程序中有以下内容:
class University(models.Model):
...
sister_university = models.OneToOneField('self',
related_name =
'university_sister_university',
blank=True, null=True,
on_delete=models.SET_NULL)
实际上,在Django Admin网站下,我可以选择A大学作为A大学的姐妹大学(本身)。是否有可能在数据库级别强制实施某种规则,以便大学对象永远不会成为自己的姐妹大学?
或者,是否有更好的方法来完成我想要做的事情?
答案 0 :(得分:0)
您想要的是check
约束,例如:
alter table university
add constraint chk_non_self_ref check (id <> sister_university_id);
我不知道在Django模型中定义此方法的方法(但我猜你可以将它添加到迁移中)。
答案 1 :(得分:0)
在模型级别,您可以覆盖模型的clean()
方法,以便在每次保存University
实例时实施该检查。
def clean(self):
if self.sister_university.id == self.id:
raise ValidationError('A university object can never be its own sister_university.')