Django:如何向后关注ForeignKey('self')

时间:2009-07-12 00:00:07

标签: django django-models foreign-keys

class Achievement(MyBaseModel):
    parent_achievement = models.ForeignKey('self', blank=True, null=True, help_text="An achievement that must be done before this one is achieved") # long name since parent is reserved

我能做到:

Achievement.objects.get(pk="1").parent_achievement

这很棒。但是我如何让所有的孩子都接受?

Achievement.objects.get(pk="1").parent_achievement_set

不起作用(可能应该有更多的符号),搜索时我没有看到太多。

有可能吗?落入SQL?

2 个答案:

答案 0 :(得分:16)

默认情况下,django将反向调用模型名称,后跟“_set”,因此它将是

Achievement.objects.get(pk="1").achievement_set

如果这不适合您,请使用related_name的{​​{1}}可选参数:

models.ForeignKey

答案 1 :(得分:1)

不知道这是否是最佳方式,但这也可以完成工作

Achievement.objects.filter(parent_achievement=1)

Achievement.objects.filter(parent_achievement__pk=1)