我是Django框架的新手,作为一个练习项目,我试图使用Django建立一个电子商务网站。我的搜索页面有一个基于类的视图。我编写了该视图以获取特定查询的查询:
views.py
class SearchProductView(ListView):
template_name = "template.html"
queryset = Product.objects.filter(title__icontains='book')
print(queryset)
我想知道如何编写一个函数来动态获取搜索查询。例如:如果我搜索book
,则我的queryset
应包含有关book
的所有信息,如果我搜索car
,则应获取有关{{1}的所有信息}。
template.html
car
urls.py
{% extends "base.html" %}
{% block content %}
<div class='row'>
{% for object in object_list %}
<div class='col'>
{{ forloop.counter }}
{% include 'products/snippets/card.html' with instance=object %}
</div>
{% endfor %}
</div>
{% endblock %}
答案 0 :(得分:1)
您需要定义get_queryset
方法,而不是类级别的queryset
属性。这可以使用您的querystring参数动态过滤查询集。
您没有显示搜索表单或没有说出您的参数是什么,但是假设它提交了名为q
的GET参数,您可以这样做:
def get_queryset(self):
return Product.objects.filter(title__icontains=self.request.GET['q'])
答案 1 :(得分:1)
尽管上面的答案会奏效,但我相信以下方法会更好:
models.py
class Category(models.Model):
title = models.CharField(...)
class Product(models.Model):
...
category = models.ForeignKey(Category)
views.py
from django.db.models import Q
def get_queryset(self):
querystr = self.request.GET['q']
Product.objects.filter(
Q(title__icontains=querystr) | Q(category__title__icontains=querystr)
)