处理多个返回的对象

时间:2009-11-06 17:34:46

标签: python django django-views

我有一个联系人/地址应用程序,允许用户在数据库中搜索联系人条目。当前视图将返回一个对象(Entry())并显示其字段。代码如下:

def search_page(request): 
    form = SearchForm() 
    entrylinks = [] 
    show_results = True 
    if request.GET.has_key('query'): 
        show_results = True 
        query = request.GET['query'].strip() 
        if query:
            form = SearchForm({'query' : query}) 
            entrylinks = \
                Entry.objects.filter (name__icontains=query)[:10] 
    variables = RequestContext(request, { 'form': form, 
        'entrylinks': entrylinks, 
        'show_results': show_results
    }) 
    return render_to_response('search.html', variables)

我想在视图中添加一个“if”语句,该语句可以识别何时返回多个对象(数据库中具有相同名称的人),并且在这种情况下,将返回的对象转移到另一个模板(这将简单地列出返回的对象,以便用户可以选择他/她更喜欢的对象)。任何人都可以展示这样的声明会是什么样子吗?感谢。

2 个答案:

答案 0 :(得分:2)

Entry.objects.filter返回的对象(QuerySet)有一个长度,这意味着您可以调用len(entrylinks)来获取返回的记录数。因此,您可以这样做:

if len(entrylinks) == 1:
    tpl = "search.html"
else:
    tpl = "select.html"
variables = RequestContext(request, {
    "form": form,
    "entrylinks": entrylinks,
    "show_results": show_results,
})
return render_to_response(tpl, variables)

答案 1 :(得分:1)

您应该使用entrylinks.count(),而不是使用len(entrylinks)。内置计数方法更快,可以为您节省数据库查询。