在Django中,递归关系和与未定义模型的关系有什么用?

时间:2011-10-29 20:33:05

标签: python database django relational-database

下面的文字来自提供

的Django文档
  

创建递归   关系 - 与自身具有多对一关系的对象 - 使用models.ForeignKey('self')。   如果需要在尚未定义的模型上创建关系,可以使用模型的名称,   而不是模型对象本身。

有人能给我一个在Django中使用这些功能的例子吗? 感谢

2 个答案:

答案 0 :(得分:3)

您可以使用它来创建指向此模型的其他对象的链接。

例如,如果您在网站中有许多成员且每个成员都有一个邀请者(也是成员类型),您可以执行以下操作:

class Member(Model):
    inviter = models.ForeignKey(
        'self',
        related_name="invited_set"
    )

如果你想要邀请者,你可以:

Member.objects.get(id__exact=5).inviter

如果您希望此会员邀请的所有会员使用:

Member.objects.get(id__exact=5).invited_set

答案 1 :(得分:1)

对于尚未定义的模型:

class Gallery(models.Model):
    title_image = models.ForeignKey('Image')

class Image(models.Model):
    part_of = models.ForeignKey(Gallery)

由于这些类相互引用,因此至少其中一个需要引用尚未定义的类。