簡體   English   中英

在Django中提出搜索請求

[英]Making a search request in 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>

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

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()

您有一個簡單的命名錯誤! 您的模型類稱為Lfm 您將結果Lfm 那行不通。

重命名您的結果(例如query_result=lfm.filter(...然后一切都會解決。

順便說一句:您似乎使用了許多相似的,令人討厭的名稱。 這就造成了難以閱讀的代碼。 嘗試使用更多的解釋性名稱,這樣的錯誤應該較少出現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM