Django自引用外键

231 投票
4 回答
107458 浏览
提问于 2025-04-17 18:21

我对网页应用和数据库的东西还不是很熟悉,所以这个问题可能有点傻。我想创建一个模型(叫做“CategoryModel”),里面有一个字段指向另一个模型实例的主ID(也就是它的父级)。

class CategoryModel(models.Model):
    parent = models.ForeignKey(CategoryModel)

我该怎么做呢?谢谢!

4 个回答

22

你还需要设置 null=Trueblank=True

class CategoryModel(models.Model):
    parent = models.ForeignKey("self", on_delete=models.CASCADE, null=True, blank=True)

null=True 是为了让数据库可以接受空值
blank=True 是为了让表单验证时可以接受空值

80

你可以用字符串'self'来表示自我引用。

class CategoryModel(models.Model):
    parent = models.ForeignKey('self')

https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey

370

你可以把模型的名字以字符串的形式传给ForeignKey,它会自动处理好相关的事情。

比如:

parent = models.ForeignKey("CategoryModel")

或者你也可以使用字符串“self”

parent = models.ForeignKey("self")

撰写回答