2013-01-22 51 views
0

template.html模型对象不可迭代

{% extends "base.html" %} 

<body> 
{% block content %} 

<form action="." method="post"> 
{% csrf_token %} 


<table align="center" style="margin-left:60px";> 

     <p>{{KEBReading_form.as_table}}</p> 
<tr><td colspan="2" align="right"><input name="KEBsubmit" type="submit" value="Submit Reading" id="_KEBsubmit1"/> </td></tr> 
    <tr><td colspan="2" >{{KEBMessage}} </td></tr> 
</table> 
</form> 


<table border="1"> 
<p> KEB Reading as on Month jan and year 2012</p> 
<tr> 
<th>Date </th> 
<th>Time</th> 
<th>True Power Reading</th> 
<th>Apparent Power Reading</th> 
<th>True Power consumed</th> 
<th>Voltage Reading</th> 
<th>Power Factor</th> 
</tr> 



{% for item in q2 %} 
<tr> 
<td>{{item.date}}</td> 
<td>{{item.time}}</td> 
<td>{{item.truepower_reading}}</td> 
<td>{{item.apparentpower_reading}}</td> 
    <td>{{item.truepower_consumed}}</td> 
    <td>{{item.voltage_reading}}</td> 
    <td> {{item.powerfactor}}</td> 
</tr> 
{% endfor %} 

</table> 

{%末端嵌段含量%}

views.py

def KEBReading1(request): 
#form2 = KEBReading.objects.all() 
if request.method == "POST": 


    form = KEBReading_form(request.POST) 
    if form.is_valid(): 
     prevdate=KEBReading.objects.latest("date") 
     # Model.objects.latest('field') 
     print prevdate.date 
     print prevdate.time 
     # q1 = KEBReading.objects.get(datetime.date.today()-datetime.timedelta(0)) 

     kr_truepower_reading = form.cleaned_data["truepower_reading"] 
     kr_apparentpower_reading = form.cleaned_data["apparentpower_reading"] 
     truepower_consumed1=kr_truepower_reading-prevdate.truepower_reading 
     powerfactor1=((kr_truepower_reading-prevdate.truepower_reading)/(kr_apparentpower_reading-prevdate.apparentpower_reading)) 
     #instance=truepower_consumed,powerfactor 
    ## replace form.save() with following lines 



     form1=form.save(commit=False) 
     #form1.calculate(truepower_consumed1,powerfactor1) 
     form1.truepower_consumed=truepower_consumed1 
     form1.powerfactor=powerfactor1 
     print form1.powerfactor 
     form1.save() 



     q2=KEBReading.objects.latest("date") 

     context={'KEBReading_form':form,'q2':q2} 
     return render_to_response('keb.html',context,context_instance=RequestContext(request)) 

else: 
    form = KEBReading_form() 

return render_to_response('keb.html',{'KEBReading_form':form},context_instance=RequestContext(request)) 

我想显示在一个表中的所有读数whic i到计算模板中的视图。我得到的模型对象不能迭代,而使用循环迭代..

回答

0

的几个问题:

  1. 首先,艾丹正确地指出KEBReading.objects.latest("date")这将返回一个对象,而不是一个集合或迭代。

  2. 其次,你没有分配任何你正在计算的字段。 truepower_consumed1=kr_truepower_reading-prevdate.truepower_reading不会将其分配给您检索到的对象(您的q2)。我不确定这是否是故意的。但是,我怀疑你想要将表单的实例返回到模板,而不是表中的另一条记录。你需要更新你的问题。

要立即解决这些问题:

<tr> 
<td>{{q2.date}}</td> 
<td>{{q2.time}}</td> 
<td>{{q2.truepower_reading}}</td> 
<td>{{q2.apparentpower_reading}}</td> 
<td>{{q2.truepower_consumed}}</td> 
<td>{{q2.voltage_reading}}</td> 
<td> {{q2.powerfactor}}</td> 
</tr> 
0

您的q2变量只是一个对象不是一组。

下面一行返回一个对象 -

KEBReading.objects.latest("date") 

但是你的模板期待一个组可以遍历 -

{% for item in q2 %} 
<tr> 
<td>{{item.date}}</td> 
<td>{{item.time}}</td> 
<td>{{item.truepower_reading}}</td> 
<td>{{item.apparentpower_reading}}</td> 
    <td>{{item.truepower_consumed}}</td> 
    <td>{{item.voltage_reading}}</td> 
    <td> {{item.powerfactor}}</td> 
</tr> 
{% endfor %} 

检查docslatest()功能。

0

latest()返回表中的最新对象,而不是一组对象。取而代之的是,你应该使用KEBReading.objects.all().order_by('date')