问题描述
|
在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属于values1列表。它是模型中对象的字段值的列表。与列表值相同2。 Record1Value3和Record3Value3属于value3列表,但按类型=“类型A”过滤。 Record2Value3属于value3列表,按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,如果记录的“类型”字段为“类型A”,则将field3的值放在列“ field3”中类型“ A”,并将“类型B的field3”保留为空白。反之亦然,B型。
问题在于它不是真的以这种方式遍历每个记录。代码块:
{%if function==’type A’%}
{{value3a}}
{%endif%}
不能真正起作用,因为它无法识别功能,而value3a属于同一对象:objects3a。我需要编写一个forms.py来做到这一点吗?如果是这样,怎么办? (请注意,我无法在forms.py中声明对象,因为我必须在views.py中获取用户输入)。
另外,有什么方法可以简化代码吗?这些许多forloop使得几乎不可能加载数据。
希望有人可以帮助我!
解决方法
没有模型实现的所有细节很难确定,但是您应该能够将the4ѭ结果直接传递给模板并在其中使用。
这是一个主意:
<th>
<td> field1</td> <td> field2</td> <td> field3 of type A</td> <td>field3 of typeB </td>
</th>
{%for object in objects %}
<tr>
<td> {{object.field1}}</td> <td> {{object.field2}}</td>
<td>
{%if object.type==’type A’%}
{{object.field3}}
{%endif%}
</td>
<td>
{%if object.type==’type B’%}
{{object.field3}}
{%endif%}
</td>
</tr>
{%endfor%}