【问题标题】:Django 2.0: Get queries dynamically from searchDjango 2.0:从搜索中动态获取查询
【发布时间】:2019-01-26 12:30:06
【问题描述】:

我是 Django 框架的新手,作为一个实践项目,我正在尝试使用 Django 构建一个电子商务网站。我的搜索页面有一个基于类的视图。我编写了视图来获取特定查询的查询:

views.py

class SearchProductView(ListView):  
    template_name = "template.html"
    queryset = Product.objects.filter(title__icontains='book')
    print(queryset)

我想知道如何编写一个函数来动态获取搜索查询。例如:如果我搜索book,那么我的queryset 应该包含关于book 的所有内容,如果我搜索car,那么我应该得到关于car 的所有内容。

template.html

{% 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 %}

urls.py

from django.urls import path
from . import views
from .views import SearchProductView

app_name = 'search'

urlpatterns = [   
    path('', SearchProductView.as_view(), name='search_page'),
]

【问题讨论】:

    标签: django python-3.x django-views django-queryset


    【解决方案1】:

    您需要定义get_queryset 方法,而不是类级别的queryset 属性。这可以使用您的查询字符串参数来动态过滤查询集。

    您没有显示您的搜索表单或说明您的参数是什么,但假设它提交了一个名为 q 的 GET 参数,您会这样做:

    def get_queryset(self):
        return Product.objects.filter(title__icontains=self.request.GET['q'])
    

    【讨论】:

    • 我有一个 GET 参数。谢谢你的回答。这解决了我的问题。我对占位符感到困惑,并且我在 self.request 上犯了一个错误。
    【解决方案2】:

    虽然上面的答案可行,但我相信更好的解决方案如下:

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

    【讨论】:

      猜你喜欢
      • 2013-09-22
      • 2013-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      相关资源
      最近更新 更多