2012-02-20 113 views
2

我正在開發一款應用程序的功能,就像Twitter的Retweet一樣。相同型號的Django相關密鑰

Item的模型中,我想爲reposted_from添加一個相關字段,該字段將引用另一個Item。我不認爲我用這個ForeignKey,因爲它是相同的模型,但我用什麼來代替?

回答

6

是很常見的一個foreign key to self添加爲這樣:

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

您可以指定related name這樣:

class Item(models.Model): 
    parent = models.ForeignKey('self', related_name='children') 

因爲該產品可能沒有父母,不要忘了空=真和空=真如此:

class Item(models.Model): 
    parent = models.ForeignKey('self', related_name='children', null=True, blank=True) 

然後,您將能夠查詢chi ldren這樣:

item.children 

你還不如用django-mptt和一些優化和額外樹功能的好處:

from mptt.models import MPTTModel, TreeForeignKey 

class Item(MPTTModel): 
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children') 
-1

如果且僅當您使用字符串時,纔會在同一模型中使用foregein鍵。

class Item(models.Model): 
    foo = models.ForeignKey("reposted_from") 

class reposted_from(models.Model): 
    repost_from = models.CharField(max_length=122) 

例如。

否則,您將獲得未定義的參考。 這就是你需要的嗎?

+0

我不認爲作品。正如你所看到的,FK構造函數簽名是類ForeignKey(othermodel [,** options])。所以,除非「reposted_from」是另一個模型的名稱,否則這將不起作用https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey – jpic 2012-02-20 08:39:58