【问题标题】:Django: How to follow ForeignKey('self') backwardsDjango:如何向后跟随 ForeignKey('self')
【发布时间】:2010-11-10 00:59:45
【问题描述】:
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?

【问题讨论】:

    标签: django django-models foreign-keys


    【解决方案1】:

    默认情况下,django 会反向调用模型名称,后跟“_set”,所以会是

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

    如果这不适合您,请使用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
    

    【讨论】:

      【解决方案2】:

      不知道这是否是最好的方法,但这也可以完成工作

      Achievement.objects.filter(parent_achievement=1)
      

      Achievement.objects.filter(parent_achievement__pk=1)
      

      【讨论】:

        猜你喜欢
        • 2012-12-23
        • 2012-11-10
        • 2021-07-22
        • 2017-01-14
        • 2017-01-17
        • 2011-10-24
        • 1970-01-01
        • 1970-01-01
        • 2018-05-03
        相关资源
        最近更新 更多