【发布时间】:2011-04-19 14:37:09
【问题描述】:
如果我在views.py中有一个对象列表,比如:
myobjects=model.objects.all()
然后我得到对象字段的值:
times=myobjects.values_list(‘time’, flat=True)
然后我想为列表时间的每个对象设置属性:
for mytime in times:
mytime.value1=myobjects.filter(time=mytime).values_list(‘value1’,flat=true)
mytime.value2=myobjects.filter(time=mytime).values_list(‘value2’,flat=true)
并使用模板html文件中的属性:
{%for mytime in times%}
<tr><td>{{mytime.value1}}</td><td>{{mytime.value2}}</td></tr>
{%endfor%}
它给了我一个错误:'unicode' object has no attribute 'value1'...(注意:当然还有 value2)。我是否要做其他事情来设置对象 mytime 的属性?我认为 object.attribute=value 足以在这里设置属性。谢谢
解决方案:我使用以下代码解决了我的问题:
objects=model.objects.all()
objects2=objects.filter(type=types[0]) # types is a list i got from user. the codes is used because i want limit type to only one type so that i could get unrepetitive time list later.
timelist=objects2.order_by('time').values('time','date','date_time','anyotherfield')
for mytime in timelist:
time=objects.filter(time=mytime['time']).values_list('time',flat=True)[0]
date=objects.filter(time=mytime['date']).values_list('date',flat=True)[0]
date_time=objects.filter(time=mytime['date_time']).values_list('date_time',
flat=True)[0]
myobjects=objects.filter(time=mytime['time']) #to get all objects on each time
mytime.update({'anyotherfield':myobjects,'date_time':date_time,
'date':date,'time':time})
return render_to_response('report.html',locals())
在我写的html页面中:
{%for mytime in timelist%}
<tr>
<td>{{mytime.date_time}}</td>
<td>{{mytime.date}}</td>
<td>{{mytime.time}}</td>
{%for object in mytime.anyotherfield%}
<td>{{object.value1}}</td>
<td>{{object.value1}}</td>
{%endfor%}
</tr>
{%endfor%}
这样我就可以为每个不同的时间('date_time')获取一行,并在每一行中显示时间信息(每个时间字段只有一个)以及该特定对象上不同对象的特定字段值时间。
【问题讨论】:
标签: python django object attributes