在Django的项目,我想显示这样的报告:如何迭代对象的字段值?
Heading: Field1 Field2 Field3 of Type A Field3 of Type B
Data: Record1Value1 Record1Value2 Record1Value3
Record2Value1 Record2Value2 Record2Value3
Record3Value1 Record3Value2 Record3Value3
其中Record1Value1和Record2Value1,Record3Value1属于值1的列表。它是模型中对象的字段值列表。与列表值2相同。 Record1Value3和Record3Value3属于值列表3,但按type ='type A'进行过滤。 Record2Value3属于值列表3,按type ='type B'进行过滤。所以在我的views.py我的代码如下图所示:
objects=model.objects.filter(field=input,…)
values1=objects.values_list(field1, flat=True)
values2=objects.values_list(field2, flat=True)
objects3a= objects.filter(type=’type A’)
objects3b= objects.filter(type=’type B’)
values3a=objects3a.values_list(field3, flat=True)
values3b=objects3b.values_list(field3, flat=True)
functions=objects.values_list(type,flat=True)
在HTML页面中,我用下面的代码:
<th>
<td> field1</td> <td> field2</td> <td> field3 of type A</td> <td>field3 of typeB </td>
</th>
{%for value1 in values1%}
{%for value2 in values2%}
{%for value3a in values3a%}
{%for value3b in values3b%}
<tr>
<td> {{value1}}</td> <td> {{value2}}</td>
<td>
{%if function==’type A’%}
{{value3a}}
{%endif%}
</td>
<td>
{%if function==’type B’%}
{{value3b}}
{%endif%}
</td>
</tr>
{%endfor%}
{%endfor%}
{%endfor%}
{%endfor%}
我想要做的是叠代的每个记录,并把现场值,但对于field3,如果记录的'type'字段为'type A',则将field3值放入'A类型的字段3'列中,并将'B类型的字段3'留空。反之亦然类型B.
问题是,它不是真的以这种方式遍历每条记录。代码块:
{%if function==’type A’%}
{{value3a}}
{%endif%}
实际上并不工作,因为它无法识别函数和value3a属于同一个对象:objects3a。我必须写一个forms.py来做到这一点吗?如果是这样,怎么样? (请注意,我不能在forms.py中声明对象,因为我必须在views.py中获得用户输入)。
此外,有没有什么办法来简化代码?这些许多事情使得加载数据几乎是不可能的。
希望有人能帮助我!
你现在什么是嵌套循环。您应该重新构建模型,以便查看与您试图向用户展示的视图相匹配的数据库。然后,您可以简单地遍历该视图并访问字段。总之,在后台进行繁重的工作,保持模板简单。 – 2011-04-14 02:21:43
我不认为我可以更改models.py中的数据,因为我根据数据库中的数据在模型中声明了字段。另外,我必须在views.py中获取用户输入,然后使用该数据获取queryset。你能举个例子吗? – widget 2011-04-14 03:42:33