我试图了解使用 relatedname_set.all
与relatedname.all
之间的区别。我有一个模板,我无法通过带有relatedname_set.all
的外键循环访问对象。我只是碰巧将其更改为relatedname.all
并且它起作用了。见下文。我有一个列表视图,它提供了指向模板的所有 Cooker 对象。
我的模型
class Cooker(models.Model):
name = models.CharField(max_length=20, name="name")
background = models.CharField(max_length=500, name="background")
class Formula(models.Model):
food = models.CharField(max_length=200, name="food")
maker = models.ForeignKey(Cooker, related_name="cooker2")
有效的模板:
<body>
{% for cook in cooker_list %}
<h2><li>{{ cook.name }}</li></h2>
<li>{% for recipe in cook.cooker2.all %}
{{ recipe.food }}
{% endfor %}</li>
{% endfor %}
</body>
模板行不起作用(第 4 行):
<li>{% for recipe in cook.cooker2_set.all %}
从文档中小心related_name
,
如果未为抽象基类中的字段指定 related_name 属性,则默认反向名称将是子类的名称,后跟
'_set'
,就像直接在子类上声明字段时通常一样。例如,在上面的代码中,如果省略了 related_name 属性,则 m2m 字段的反向名称将在 ChildA 案例中childa_set,childb_set ChildB 字段。
从本质上讲,通过提供自己的,您可以覆盖默认值。