首页 > 解决方案 > 当我们在 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

我知道这不是正确的方法,但请帮我解决这个问题,或指导我正确的排序方法。

标签: pythondjangodjango-viewsdjango-filter

解决方案


你应该试试我给的代码

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)

如果遇到任何问题或使用这些东西,请告诉我


推荐阅读