2013-03-08 50 views
95

我对web应用程序和数据库的东西是一般的新东西,所以这可能是一个愚蠢的问题。我想创建一个模型(“CategoryModel”),该模型的字段指向模型的另一个实例(其父)的主ID。Django自引用外键

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

我该怎么做?谢谢!

回答

156

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

所以:

parentId = models.ForeignKey("CategoryModel") 

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

parentId = models.ForeignKey("self") 
+7

或者只是使用'self' – 2013-03-08 02:27:38

+0

前者似乎并不为CategoryModel类的工作还没有定义,但后者一样。 (Django 1.5.4)我做错了什么? – szabgab 2013-10-22 17:07:32

+3

@szabgab一旦模型名称作为字符串传递,它就可以工作。 – Vaughan 2017-10-22 21:20:08

37

您可以使用字符串“自我”,表示自参考。

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

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

+5

我认为你的意思是“自我”。就像在字符串中一样。自我在这方面未定义 – 2013-03-08 02:28:40

+0

良好的捕获。谢谢 – Brandon 2013-03-08 02:32:53

+0

@Brandon在你的回答中,“自我”与贾里德在评论中所说的有什么不同? “我认为你的意思是'自我'! 。根据Django文档,两者都是很好的字符串。 !任何提示 – Stryker 2016-11-02 03:06:02