cja*_*gir 0 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)
Run Code Online (Sandbox Code Playgroud)
这是我的观点:
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
Run Code Online (Sandbox Code Playgroud)
一切都工作正常,除了在我的模板'admin/layer.html'我尝试这个:
{% for list in mylist %}
{{ list.bb.d }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
但我没有得到任何价值{{ list.bb.d }}我可以在django模板中以这种方式使用相关的字段名称吗?
请注意,list.bb只会给你RelatedManager.这里的实例A可以与多个实例相关B.
因此,要获得它们,您需要使用以下语法:
{% for a_obj in mylist %}
{% for b_obj in a_obj.bb.all %}
{{ b_obj }}
{% endfor %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
这里提供更多细节:
您可以
FOO_set通过related_name在ForeignKey定义中设置参数来覆盖名称.例如,如果Entry模型被更改为blog = ForeignKey(Blog, on_delete=models.CASCADE, related_name='entries'),上面的示例代码将如下所示:Run Code Online (Sandbox Code Playgroud)>>> b = Blog.objects.get(id=1) >>> b.entries.all() # Returns all Entry objects related to Blog.