如何迭代对象的字段值?

时间:2011-04-14 02:08:52

标签: python django html-table field

在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属于values3的列表,但是按type ='type A'过滤。 Record2Value3属于值列表3,按类型='类型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值放入列'类型A的字段3',并将'类型B的字段3'留空。反之亦然B型。

问题是它并没有真正以这种方式循环遍历每条记录。代码块:

{%if function==’type A’%}   
{{value3a}}  
{%endif%}  

不能正常工作,因为它无法识别函数,而value3a属于同一个对象:objects3a。我必须写一个forms.py来做这个吗?如果是这样,怎么样? (请注意,我无法在forms.py中声明对象,因为我必须在views.py中获取用户输入。)

另外,有没有办法简化代码?这些许多forloops几乎不可能加载数据。

希望有人可以帮助我!

1 个答案:

答案 0 :(得分:1)

如果没有模型实现的所有细节,很难肯定地说,但您应该能够将objects结果直接传递给您的模板并在那里使用它。

以下是这个想法:

<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%}