2017-07-02 120 views
0

我得到的错误是“'help'对象不可迭代”。 我如何从数据库中获取的最新记录,并得到它显示我的目标HTML页面上如何从django的数据库中获取最新数据

我views.py是

def about_experiment(request,ex_link_name): 
    researcher = None 
    study = None 
    posts = None 
    if request.method == 'POST': 
     form = AboutHelp(request.POST) 
     posts = help.objects.filter().order_by('-date')[0] 
     #print(posts) 
     if form.is_valid(): 
      obj = form.save(commit = False) 
      obj.save() 
      researcher = form.cleaned_data['researcher'] 
      study = form.cleaned_data['study'] 

    else: 
     form = AboutHelp() 
    return render(request, 'about_experiment.html', {'posts': posts}) 

我的目的地页面about_experiment.html是

{% for help in posts %} 
    <h4><b>{{ help.study }}</b></h4> 
    <p>posted by {{ help.researcher }} on {{help.date}}</p> 
    {% endfor %} 
+0

也许你忘了输入模型?像'从appName.models导入帮助'在views.py文件的顶部 – hansTheFranz

+0

不能在那里。当你尝试使用'help.objects.all()'时会发生什么,我有 – unknown

+0

?你在模型中安装了'objects = Manager'吗? – hansTheFranz

回答

0

为了增加voodoo-burger's答案:

posts = help.objects.filter().order_by('_date') 

返回的查询集,这是一个迭代。但是你添加了[0],所以你只能从查询集中获得一个对象,因此它将不可迭代。

在您的模板里,你因此你可以只使用{{ posts.field_name }}

因为你只返回一个对象,post是一个更合乎逻辑的描述性名称,然后posts(如voodoo-burger提到的)

1

你是如何定义帮助模型的?如果是class Help,你应该改变这样的:

posts = help.objects.filter().order_by('-date')[0] 

要这样:

posts = Help.objects.filter().order_by('-date')[0] 
+0

它没有作出任何差异,因为我的课是班级帮助 – unknown

+0

你得到错误POST,GET操作或两者? – FedericoG

+0

其用于请求方法POST – unknown

0

{{ posts }}在你的模板将是help类,它是不是一个迭代的一个对象实例,所以你可以”不要在for循环中使用它。而只需使用{{ posts.fieldname }}

也考虑将posts更改为更合乎逻辑的名称。您可以使用post甚至help