python - 当我们在 Django 中搜索某些产品时如何进行产品排序?
问题描述
视图.py:-
def search(request):
global pro
global products
if not request.GET.get('price_filter') == '1' or request.GET.get('price_filter') == '2':
q = request.GET.get("q")
products = Product.objects.filter(active=True, name__icontains=q)
categories = Category.objects.filter(active=True)
brands = Brand.objects.filter(active=True)
context = {"products": products,
"categories": categories,
"brands": brands,
"title": q + " - search"}
return render(request, "shop/home.html", context)
pro = products
if request.GET.get('price_filter') == '1':
products = pro.order_by('price')
categories = Category.objects.filter(active=True)
brands = Brand.objects.filter(active=True)
context = {"products": products,
"categories": categories,
"brands": brands}
return render(request, "shop/home.html", context)
elif request.GET.get('price_filter') == '2':
products = pro.order_by('-price')
categories = Category.objects.filter(active=True)
brands = Brand.objects.filter(active=True)
context = {"products": products,
"categories": categories,
"brands": brands}
return render(request, "shop/home.html", context)
在 HTML 中:-
<form method='get' action='#' style="margin-top:-20px; margin-left: 8px;">
<input class="btn btn-outline-dark" type="checkbox" value="1" name="price_filter"/>Low to High
<input class="btn btn-outline-dark" type="checkbox" value="2" name="price_filter"/>High to Low
<button class="btn" type="submit" value="Sort">Sort</button>
</form>
使用该搜索,我们可以从低到高排序,但是当我选择从高到低时,它会显示某些错误:-
Cannot use None as a query value
我知道这不是正确的方法,但请帮我解决这个问题,或指导我正确的排序方法。
解决方案
你应该试试我给的代码
def search(request):
price_filter = request.GET.get('price_filter',None)
context = {}
if price_filter not in '12':
q = request.GET.get("q")
products = Product.objects.filter(active=True, name__icontains=q)
context = {"title": q + " - search"}
if price_filter == '1':
pro = Product.objects.filter(active=True, name__icontains=q) if request.GET.get("q",None) else Product.objects.filter(active=True)
products = pro.order_by('price')
elif price_filter == '2':
pro = Product.objects.filter(active=True, name__icontains=q) if request.GET.get("q",None) else Product.objects.filter(active=True)
products = pro.order_by('-price')
categories = Category.objects.filter(active=True)
brands = Brand.objects.filter(active=True)
context =context.update({"products": products,
"categories": categories,
"brands": brands})
return render(request, "shop/home.html", context)
如果遇到任何问题或使用这些东西,请告诉我
推荐阅读
- javascript - 数据表搜索 td 属性
- spring-boot - 如何在执行骆驼处理器期间而不是在路线结束时强制持久化数据?
- xml - 如何在不重复的情况下将带有 XmlStarlet 的标签添加到 XML 文档
- python - 我什么时候应该在 Flask 中验证表单数据
- javascript - Moment js diff字符串
- python - 无法在 VS Code 中运行 Python 程序 - 'cmd' 未被识别为
- php - 阻止机器人抓取页面的 406 错误
- vba - 单击收藏夹部分中的文件夹时移动 Outlook 文件夹滚动条
- c# - 如何使用 Loadfrom 加载 interop.excel.dll
- elasticsearch - 文档类中的 ONGR ElasticSearchBundle 映射