Django:如何向后跟随 ForeignKey('self')
Posted
技术标签:
【中文标题】Django:如何向后跟随 ForeignKey(\'self\')【英文标题】: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?
【问题讨论】:
【参考方案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)
【讨论】:
以上是关于Django:如何向后跟随 ForeignKey('self')的主要内容,如果未能解决你的问题,请参考以下文章
Django:如何获取列表相关的 ForeignKey 记录?
在 Django 中,如何将 ForeignKey 传递给 Model 的实例?