在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