【发布时间】:2017-04-04 13:13:49
【问题描述】:
我设置了这些模型:
class Bar:
name = models.CharField()
foos = models.ManyToManyField(
through='FooBar'
through_fields=('bar','foo')
)
class Foo:
name = models.CharField()
class FooBar:
foo = models.ForeignKey(Foo)
bar = models.ForeignKey(Bar)
value = models.DecimalField()
我正在尝试创建一个复式表来显示每个 Bar 的值,它的 Foos 的值,如果 Bar 没有这个 Foo 的值,则 n/a。
这就是我想要的样子:
[Foo1] [Foo2] [Foo3]
[Bar1] 4 n/a n/a
[Bar2] 3 n/a 9
[Bar3] n/a 1 n/a
这是我的代码:
<tr>
{%for foo in foo_list%}
<th>{{foo.name}}</th>
{%endfor%}
</tr>
{%for bar in bar_list%}
<th>{{bar.name}}</th>
{%for foo in foo_list%}
{%for foobar in bar.foobar_set.all%}
{%if foobar.foo == foo%}
<td>{{foobar.value}}</td>
{%endif%}
{%endfor%}
{%endfor%}
</tr>
{%endfor%}
我不知道如何检查 foobar 是否与 foo 对应。
我可以用 for i in range(0,foo_list.count()) 来做这件事,而用 i 来做这件事,但我不能在 Django 模板语言中做到这一点。
【问题讨论】:
-
在视图中创建数据会更好。创建一个包含所有 Foo 的标题和一个包含有关 Bar / Foo 关系的所有数据的行列表。逻辑在视图或模型上更好。不在模板中。
-
这基本上是我所做的。只有我把它放在标签而不是视图中
标签: django django-models django-templates