2017-02-17 66 views
0

我正在嘗試爲我的django項目創建一個搜索欄,但每當搜索到某個東西時,它都會返回默認情況下的所有內容。在django中發出搜索請求

下面是從內部views.py代碼:

def index(request): 
     if not request.user.is_authenticated(): 
      return render(request, 'Lfm/login.html') 
     else: 
      lfm = Lfm.objects.filter(user=request.user) 
      query = request.GET.get('q') 
      if query: 
       Lfm = lfm.filter(
       Q(name__icontains=query) | 
       Q(region__icontains=query) | 
       Q(rank__icontains=query) 
       ).distinct() 
       return render(request, 'Lfm/index.html', {'lfm': Lfm,}) 
      else: 
     return render(request, 'Lfm/index.html', {'Lfm': lfm }) 

models.py文件:

class Lfm(models.Model): 
    name = models.CharField(max_length=20) 
    rank = models.CharField(max_length=20, choices=RANKS) 
    rank_sr = models.IntegerField() 
    region = models.CharField(max_length=20, choices=REGIONS) 
    roles = models.CharField(max_length=30, choices=ROLES) 
    btag = models.CharField(max_length=30) 
    time = models.CharField(max_length=14, choices=TIMES) 
    logo = models.FileField() 
    contact_email = models.EmailField() 

和base.html文件

<form class="navbar-form navbar-left" role="search" method="get" action="{% url 'Lfm:index' %}"> 
       <div class="form-group"> 
        <input type="text" class="form-control" name="q" value="{{ request.GET.q }}"> 
       </div> 
       <button type="submit" class="btn btn-default">Search</button> 
      </form> 

回答

0

你需要運行您的初始查詢過濾器。

def index(request): 
    if not request.user.is_authenticated(): 
     return render(request, 'Lfm/login.html') 
    else: 
     lfm = Lfm.objects.filter(Q(user=request.user, Q(
      Q(name__icontains=query) | 
      Q(region__icontains=query) | 
      Q(rank__icontains=query)) 
      ).distinct() 
0

您有一個簡單的命名錯誤! 您的模特級別名爲Lfm。您將結果命名爲Lfm。這是行不通的。

重命名你的結果(例如query_result=lfm.filter(...,一切都應該工作了。

順便說一句。:您似乎使用很多類似的,突兀的名字。這造成難以閱讀的代碼。嘗試使用更多的解釋的名稱和錯誤一樣,應該不經常發生。