Django自我指称外键

时间:2013-03-08 02:22:10

标签: python django django-orm

我对Web应用程序和数据库的新东西很新,所以这可能是一个愚蠢的问题。我想创建一个模型(“CategoryModel”),其中的字段指向模型的另一个实例(其父项)的主要ID。

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

我该怎么做?谢谢!

4 个答案:

答案 0 :(得分:203)

您可以将模型的名称作为字符串传递给ForeignKey,它会做正确的事。

所以:

parentId = models.ForeignKey("CategoryModel")

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

parentId = models.ForeignKey("self")

答案 1 :(得分:47)

您可以使用字符串'self'来表示自引用。

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

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

答案 2 :(得分:1)

https://books.agiliq.com/projects/django-orm-cookbook/en/latest/self_fk.html

class Employee(models.Model):
    manager = models.ForeignKey('self', on_delete=models.CASCADE)

OR

class Employee(models.Model):
    manager = models.ForeignKey("app.Employee", on_delete=models.CASCADE)

https://stackabuse.com/recursive-model-relationships-in-django/

答案 3 :(得分:0)

您还可以设置null = True和blank = True

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

null = True,允许在数据库中使用
blank = True,允许进行表单验证