2017-02-17 6 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(...、すべてがうまくいかなければならない。

ところで

あなたは多くの同様の、目障りな名前を使用するように見える.:。それは、コードを読み取ることが難しい作成します。そのようなより多くの説明の名前とエラーを使用してみてくださいあまり頻繁に起こらないようにしてください。

関連する問題