2013-03-08 87 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