如何使用ForeignKey('self')获取字段而无法链接到同一条目?

时间:2010-09-27 17:37:57

标签: python django django-models

我在构建带有外键的模型时遇到了一个小问题。

这是一个例子:

class Example (model.Model):
    parent = models.ForeignKey('self', null=True, blank=True)
    # and some other fields

在管理面板中创建新条目并进入此示例以编辑某些内容后,我意识到我可以将父级设置为当前条目。但这不是我想用ForeignKey和它自己的关系。

是否可以禁止链接到自身?

也许最好使用一个具有正确选择的整数字段,但我并不确定如何实现这种平滑且类似Python的方式。

2 个答案:

答案 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(...)