Python 如何迭代对象的字段值?
在django项目中,我尝试如下方式显示报告:Python 如何迭代对象的字段值?,python,django,html-table,field,Python,Django,Html Table,Field,在django项目中,我尝试如下方式显示报告: Heading: Field1 Field2 Field3 of Type A Field3 of Type B Data: Record1Value1 Record1Value2 Record1Value3 Record2Value1 Record2Value2 Record2Value3
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'过滤。因此,在my 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%}
实际上不起作用,因为它无法识别函数和值3a属于同一个对象:objects3a。我必须写一个forms.py来完成这项工作吗?如果是,怎么做?(请注意,我不能在forms.py中声明对象,因为我必须在views.py中获取用户输入)
还有,有没有办法简化代码?如此多的forloop使得加载数据几乎不可能
希望有人能帮助我 如果没有模型实现的所有细节,很难确定,但是您应该能够将
对象
结果直接传递到模板并在那里使用它
我的想法是:
<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%}
字段1字段2字段3类型A字段3类型B
{对象%中的对象的%}
{{object.field1}}{{object.field2}}
{%if object.type=='type A%}
{{object.field3}}
{%endif%}
{%if object.type=='type B%}
{{object.field3}}
{%endif%}
{%endfor%}
如果没有模型实现的所有细节,很难确定,但是您应该能够将对象直接传递到模板,并在那里使用它
我的想法是:
<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%}
字段1字段2字段3类型A字段3类型B
{对象%中的对象的%}
{{object.field1}}{{object.field2}}
{%if object.type=='type A%}
{{object.field3}}
{%endif%}
{%if object.type=='type B%}
{{object.field3}}
{%endif%}
{%endfor%}
您现在拥有的是一个嵌套循环。您可能应该重新构造模型,以便在数据库中有一个与您试图向用户显示的视图相匹配的视图。然后,您可以简单地在该视图上循环,并简单地访问字段。简言之,在后端完成繁重的工作,保持模板简单。我认为我无法更改models.py中的数据,因为我根据数据库中的数据声明了模型中的字段。此外,我必须在views.py中获取用户输入,然后使用该数据获取queryset。你能举个例子吗?你现在拥有的是一个嵌套循环。您可能应该重新构造模型,以便在数据库中有一个与您试图向用户显示的视图相匹配的视图。然后,您可以简单地在该视图上循环,并简单地访问字段。简言之,在后端完成繁重的工作,保持模板简单。我认为我无法更改models.py中的数据,因为我根据数据库中的数据声明了模型中的字段。此外,我必须在views.py中获取用户输入,然后使用该数据获取queryset。你能举个例子吗?太棒了!它看起来很简单,但我没有想到我可以直接访问对象的字段。它很好地解决了我的问题。另外,我使用了{%if'typea'在object.type%}
而不是{%if object.type='typea%}
,因为该字段的某些数据有换行符。问题解决了。谢谢你!它看起来很简单,但我没有想到我可以直接访问对象的字段。它很好地解决了我的问题。另外,我使用了{%if'typea'在object.type%}
而不是{%if object.type='typea%}
,因为该字段的某些数据有换行符。问题解决了。谢谢