2009-11-06 68 views
0

我有一個聯繫人/地址應用程序,允許用戶在數據庫中搜索聯繫人條目。當前視圖將返回一個對象(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) 

我想加一個「如果」語句視圖時有多個對象返回(與數據庫同名的人),並在這樣的,承認的情況下,將返回的對象轉移到不同的模板(這將簡單地列出返回的對象,以便用戶可以選擇他/她更喜歡哪個)。任何人都可以展示這樣的聲明會是什麼樣子?謝謝。

回答

2

Entry.objects.filter(a 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) 
+0

真棒。 thanx much mipadi。讚賞。 – kjarsenal

1

而不是使用LEN(entrylinks),你應該使用entrylinks.count()。內置計數方法速度更快,可以爲您節省數據庫查詢。

+1

'entrylinks.count()'不會導致_another_數據庫查詢嗎? 'count()'在後臺執行'SELECT COUNT(*)...'。 – mipadi

+0

同意mipadi。在這種情況下,'len'實際上更高效,因爲無論如何您需要在模板中評估查詢集。 –

+0

廢話,你說得對。我一直在想這一切都是錯誤的。 –