我正在開發一款應用程序的功能,就像Twitter的Retweet一樣。相同型號的Django相關密鑰
在Item
的模型中,我想爲reposted_from
添加一個相關字段,該字段將引用另一個Item
。我不認爲我用這個ForeignKey
,因爲它是相同的模型,但我用什麼來代替?
我正在開發一款應用程序的功能,就像Twitter的Retweet一樣。相同型號的Django相關密鑰
在Item
的模型中,我想爲reposted_from
添加一個相關字段,該字段將引用另一個Item
。我不認爲我用這個ForeignKey
,因爲它是相同的模型,但我用什麼來代替?
是很常見的一個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')
是的,你可以使用ForeignKey來自我。請參閱https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey
如果且僅當您使用字符串時,纔會在同一模型中使用foregein鍵。
class Item(models.Model):
foo = models.ForeignKey("reposted_from")
class reposted_from(models.Model):
repost_from = models.CharField(max_length=122)
例如。
否則,您將獲得未定義的參考。 這就是你需要的嗎?
我不認爲作品。正如你所看到的,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