我正在开发一个类似Twitter转推的应用程序功能。
在Item
的模型中,我想为reposted_from
添加一个引用另一个Item
的相关字段。我不认为我使用ForeignKey
,因为它是相同的模型,但我使用什么呢?
答案 0 :(得分: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')
因为Item可能没有父项,所以不要忘记null = True和blank = True:
class Item(models.Model):
parent = models.ForeignKey('self', related_name='children', null=True, blank=True)
然后你就可以这样查询孩子了:
item.children
您也可以使用django-mptt并获得一些优化和额外的树功能:
from mptt.models import MPTTModel, TreeForeignKey
class Item(MPTTModel):
parent = TreeForeignKey('self', null=True, blank=True, related_name='children')
答案 1 :(得分:0)
是的,你可以使用ForeignKey来实现自我。见https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey
答案 2 :(得分:-1)
当且仅当您使用字符串时,才会在同一模型中使用外键。
class Item(models.Model):
foo = models.ForeignKey("reposted_from")
class reposted_from(models.Model):
repost_from = models.CharField(max_length=122)
例如。否则,您将获得未定义的引用。 这就是你需要的吗?