在Django模板中使用相关字段名称 [英] Use of related field name in django template
问题描述
我有两个类似的拖曳模型:
I have tow models like below:
class A(models.Model):
a = models.BooleanField(default=False)
q = models.BooleanField(default=False)
class B(models.Model):
c = models.Foreignkey('A', related_name='bb')
d = models.BooleanField(default=False)
e = models.BooleanField(default=False)
这是我的观点:
class Myview(ListView):
model = A
template_name = 'admin/layer.html'
def get_context_data(self, *args, **kwargs):
context = super(ListView, self).get_context_data(*args, **kwargs)
context['mylist'] = A.objects.filter(bb__e=False)
return context
一切正常,除了在我的模板"admin/layer.html"中,我正在尝试以下方法:
Everything is working fine except In my template 'admin/layer.html' I am trying this:
{% for list in mylist %}
{{ list.bb.d }}
{% endfor %}
但是我没有得到{{ list.bb.d }}
的任何值,我可以在Django模板中以这种方式使用相关字段名称吗?
but I do not get any value for {{ list.bb.d }}
Can I use related field name in this way in django template ?
推荐答案
Note that list.bb
will only give you the RelatedManager
. Here an instance of A
can be related to multiple instances of B
.
因此,要获取所有内容,您需要使用以下语法:
So to get them all you need to use following syntax:
{% for a_obj in mylist %}
{% for b_obj in a_obj.bb.all %}
{{ b_obj }}
{% endfor %}
{% endfor %}
提供了更多详细信息此处 :
More details provided here:
您可以通过在
ForeignKey
定义中设置related_name
参数来覆盖FOO_set
名称.例如,如果将Entry
模型更改为blog = ForeignKey(Blog, on_delete=models.CASCADE, related_name='entries')
,则上面的示例代码将如下所示:
You can override the
FOO_set
name by setting therelated_name
parameter in theForeignKey
definition. For example, if theEntry
model was altered toblog = ForeignKey(Blog, on_delete=models.CASCADE, related_name='entries')
, the above example code would look like this:
>>> b = Blog.objects.get(id=1)
>>> b.entries.all() # Returns all Entry objects related to Blog.
这篇关于在Django模板中使用相关字段名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!