我对网络应用和数据库的东西还不熟悉,所以这可能是一个愚蠢的问题。我想创建一个模型(“CategoryModel”),其中的字段指向模型的另一个实例(其父实例)的主id。

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

我怎么做呢?谢谢!


当前回答

你可以使用字符串'self'来表示一个自引用。

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

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

其他回答

你还需要设置null=True和blank=True

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

null=True,允许进入数据库 blank=True,允许表单验证

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

So:

parent = models.ForeignKey("CategoryModel")

或者你可以使用字符串self

parent = models.ForeignKey("self")

你可以使用字符串'self'来表示一个自引用。

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

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

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/