Django相关模型的相关密钥

Bre*_*den 2 python django

我正在为一个类似于Twitter转发的应用程序开发一个功能.

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

jpi*_*pic 6

通常会向自己添加一个外键:

class Item(models.Model):
    parent = models.ForeignKey('self')
Run Code Online (Sandbox Code Playgroud)

您可以指定相关名称:

class Item(models.Model):
    parent = models.ForeignKey('self', related_name='children')
Run Code Online (Sandbox Code Playgroud)

因为Item可能没有父级,所以不要忘记null = True和blank = True:

class Item(models.Model):
    parent = models.ForeignKey('self', related_name='children', null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)

然后你就可以这样查询孩子了:

item.children
Run Code Online (Sandbox Code Playgroud)

你不妨使用django-mptt并获得一些优化和额外的树特性:

from mptt.models import MPTTModel, TreeForeignKey

class Item(MPTTModel):
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children')
Run Code Online (Sandbox Code Playgroud)