2010-10-25 53 views
0

你好,我在Django我的工作如何使用從Django的文檔的網站搜索表單。以下是一些信息。 現在,有沒有一種方法可以產生部分搜索標題?例如,如果我想搜索一本名爲「Apress」的書,而不是輸入整個單詞,我只是寫了「ap」來獲得Apress。有沒有辦法實現這個解決方案?編輯搜索視圖在Django

from django.db.models import Q 
    from django.shortcuts import render_to_response 
    from models import Book 

    #views.py 
    def search(request): 
     query = request.GET.get('q', '') 
     if query: 
      qset = (
       Q(title__icontains=query) | 
       Q(authors__first_name__icontains=query) | 
       Q(authors__last_name__icontains=query) 
      ) 
      results = Book.objects.filter(qset).distinct() 
     else: 
      results = [] 
     return render_to_response("books/search.html", { 
      "results": results, 
      "query": query 
     }) 

    #search html 

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> 
    <html lang="en"> 
    <head> 
     <title>Search{% if query %} Results{% endif %}</title> 
    </head> 
    <body> 
     <h1>Search</h1> 
     <form action="." method="GET"> 
     <label for="q">Search: </label> 
     <input type="text" name="q" value="{{ query|escape }}"> 
     <input type="submit" value="Search"> 
     </form> 

     {% if query %} 
     <h2>Results for "{{ query|escape }}":</h2> 

     {% if results %} 
      <ul> 
      {% for book in results %} 
      <li>{{ book|escape }}</l1> 
      {% endfor %} 
      </ul> 
     {% else %} 
      <p>No books found</p> 
     {% endif %} 
     {% endif %} 
    </body> 
    </html> 
+0

這有什麼錯你的代碼? – 2010-10-25 14:53:29

+0

沒什麼,但我想執行部分搜索。例如,如果我想查找一本名爲「哈利波特」的書的標題,我希望能夠輸入「哈」或「哈」或以其他方式查看它。 – Shehzad009 2010-10-25 15:01:04

回答

1

如果你想匹配一個字段的開始,你可以,如果你希望它是區分大小寫的使用startswithistartswith。你現在使用的icontains將允許甚至在字符串內匹配,即。 '阿里'會匹配'哈利'。雖然startswith將使「喀拉」匹配「哈利」,而不是「ArHarHar」

+0

是的,這是我一直在尋找的感謝。如果我使用的是數字而不是普通字符,它可以與startswith一起使用,也可以使用其他語言。讓我解釋一個例子。假設我想搜索一個數字「1200」,但我只想輸入「12」來獲得「1200」。 – Shehzad009 2010-10-26 08:23:58

+0

如果該字段是字符字段,並且您正在搜索字符串「12」而不是數字12,那麼是的,它會起作用。但是,如果該字段是某種類型的整數字段,我不知道使用startswith是否可行,可能不會。 – knutin 2010-10-26 08:31:41

+0

是的,這就是我所說的,因爲如果有一個整數字段可能無法正常工作。我能想到的唯一的事情就是通過視圖的硬編碼來做到這一點,但這可能太複雜了。 – Shehzad009 2010-10-26 08:35:00