Si j'ai une liste d'objets dans views.py, comme par exemple :
myobjects=model.objects.all()
puis j'obtiens les valeurs d'un champ des objets :
times=myobjects.values_list(‘time’, flat=True)
et je veux ensuite attribuer un attribut à chaque objet de la liste :
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)
et utiliser l'attribut dans le fichier html du modèle en utilisant :
{%for mytime in times%}
<tr><td>{{mytime.value1}}</td><td>{{mytime.value2}}</td></tr>
{%endfor%}
Je reçois une erreur : l'objet 'unicode' n'a pas d'attribut 'value1' (Note : bien sûr aussi value2). Dois-je faire quelque chose d'autre pour définir l'attribut de l'objet mytime ? Je pensais que object.attribute=value était suffisant pour définir l'attribut ici. Merci de votre compréhension.
Solution : J'ai résolu mon problème en utilisant les codes ci-dessous :
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())
Dans la page html, j'écris
{%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%}
afin d'obtenir une ligne pour chaque heure différente ('date_time'), et d'afficher dans chaque ligne les informations relatives à l'heure (une et une seule pour chaque champ temporel) et les valeurs des champs spécifiques pour les différents objets à cette heure précise.