198

一般来说,我对 webapps 和数据库的东西有点陌生,所以这可能是一个愚蠢的问题。我想创建一个模型(“CategoryModel”),其字段指向模型的另一个实例(其父级)的主 ID。

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

我该怎么做呢?谢谢!

4

4 回答 4

324

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

所以:

parent = models.ForeignKey("CategoryModel")

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

parent = models.ForeignKey("self")
于 2013-03-08T02:25:18.277 回答
68

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

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

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

于 2013-03-08T02:25:34.903 回答
12

您还可以设置null=Trueblank=True

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

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

于 2019-12-17T14:09:34.923 回答
8

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)

或者

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

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

于 2019-06-19T18:34:09.950 回答