Как перебрать значения полей объектов? - PullRequest
1 голос
/ 14 апреля 2011

В проекте 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, но фильтруются по типу = 'тип 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, если в поле «type» записи указано «type A», поместите значение field3 в столбец «field3 типа A» и оставьте «field3»тип B 'пусто.И наоборот, для типа B.

Проблема заключается в том, что он не выполняет циклический просмотр каждой записи таким образом.Блок кодов:

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

на самом деле не работает, потому что не распознает функцию и значение3a принадлежит одному и тому же объекту: objects3a.Должен ли я написать forms.py для этого?Если так, то как?(Обратите внимание, что я не могу объявить объекты в forms.py, потому что я должен получить пользовательский ввод в views.py).

Кроме того, есть ли способ упростить коды?Эти многочисленные циклы делают загрузку данных практически невозможной.

Надеюсь, кто-нибудь может мне помочь!

1 Ответ

1 голос
/ 14 апреля 2011

Трудно сказать наверняка без всех деталей реализации вашей модели, но вы должны быть в состоянии передать результат 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%}
...