[英]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.