在django模板中使用相关字段名称

时间:2016-05-04 05:04:27

标签: django django-templates foreign-key-relationship

我有两个模型如下:

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'中,我正在尝试这个:

{% for list in mylist %}
    {{ list.bb.d }}
{% endfor %}

但我对{{ list.bb.d }}没有任何价值。我可以在django模板中以这种方式使用相关字段名吗?

1 个答案:

答案 0 :(得分:5)

请注意,<dynamicField name="*_i" type="int" indexed="true" stored="true"/> 只会为您提供RelatedManager。这里list.bb的实例可以与A的多个实例相关联。

因此,为了得到它们,您需要使用以下语法:

B

提供了更多详情here

  

您可以通过在{% for a_obj in mylist %} {% for b_obj in a_obj.bb.all %} {{ b_obj }} {% endfor %} {% endfor %} 定义中设置FOO_set参数来覆盖related_name名称。例如,如果ForeignKey模型已更改为Entry,则上面的示例代码如下所示:

blog = ForeignKey(Blog, on_delete=models.CASCADE, related_name='entries')