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

Pau*_*jan 10 django foreign-keys django-models

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
Run Code Online (Sandbox Code Playgroud)

我可以 :

Achievement.objects.get(pk="1").parent_achievement
Run Code Online (Sandbox Code Playgroud)

这很棒.但我如何让所有的孩子?

Achievement.objects.get(pk="1").parent_achievement_set
Run Code Online (Sandbox Code Playgroud)

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

可能吗?陷入SQL?

Sin*_*ion 16

默认情况下,django将反向调用模型名称,然后调用"_set",这样就可以了

Achievement.objects.get(pk="1").achievement_set
Run Code Online (Sandbox Code Playgroud)

如果这不适合您,请使用related_name可选参数models.ForeignKey:

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",
        related_name="child_achievement_set"
    ) # long name since parent is reserved

Achievement.objects.get(pk="1").child_achievement_set
Run Code Online (Sandbox Code Playgroud)

  • 精彩.工作得很好.会再次购买.A ++ (7认同)