Django相关模型的相关密钥

时间:2012-02-20 06:55:13

标签: python django

我正在开发一个类似Twitter转推的应用程序功能。

Item的模型中,我想为reposted_from添加一个引用另一个Item的相关字段。我不认为我使用ForeignKey,因为它是相同的模型,但我使用什么呢?

3 个答案:

答案 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)

例如。否则,您将获得未定义的引用。 这就是你需要的吗?