2009-11-06 2 views
0

I 사용자가 연락처 항목에 대한 데이터베이스를 검색 할 수 있습니다 연락처/주소 응용 프로그램을 반환. 현재 뷰는 객체 (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 (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

굉장합니다. 고맙습니다. 고맙습니다. – kjarsenal

1

오히려 LEN (entrylinks)를 사용하는 것보다, 당신은 entrylinks.count를 사용해야합니다(). 내장 카운트 방법은 훨씬 빠르며 데이터베이스 쿼리를 저장할 수 있습니다.

+1

_another_ DB 쿼리에서'entrylinks.count()'가 발생하지 않습니까? 'count()'는 장면 뒤에서'SELECT COUNT (*) ... '를합니다. – mipadi

+0

mipadi와 동의합니다. 이 경우,'len'은 실제로 템플릿에서 queryset을 평가할 필요가 있기 때문에 실제로 더 효율적입니다. –

+0

젠장, 네 말이 맞아. 나는 그것에 대해 모두 잘못 생각하고 있었다. –