我在构建带有外键的模型时遇到了一个小问题。
这是一个例子:
class Example (model.Model):
parent = models.ForeignKey('self', null=True, blank=True)
# and some other fields
在管理面板中创建新条目并进入此示例以编辑某些内容后,我意识到我可以将父级设置为当前条目。但这不是我想用ForeignKey和它自己的关系。
是否可以禁止链接到自身?
也许最好使用一个具有正确选择的整数字段,但我并不确定如何实现这种平滑且类似Python的方式。
答案 0 :(得分:1)
这样做的一种方法是覆盖模型的干净方法
class Example(model.Model):
#...
def clean(self):
if self.parent.id == self.id:
raise ValidationError("no self referential models")
这将被称为对象验证的第二步,并将阻止该对象插入数据库。
答案 1 :(得分:0)
可以禁止从实例到同一实例的链接。实现此目的的一种方法是添加自定义model validation。对于例如
class Example(models.Model):
...
def clean_fields(self):
if self.id and self.parent.id == self.id:
raise ValidationError(...)