You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django电商项目如何实现自定义价格区间的商品筛选功能

HTML 调整

当前HTML代码缺少form表单包裹,无法将输入的价格参数提交到后端,修改后代码如下:

<form method="GET" action="{% url '你的sort视图对应的路由名称' %}">
  <div class="sort__prices">
    <input class="sort__min-price" type="number" name="min-price" placeholder="最低价格" min="0">
    <input class="sort__max-price" type="number" name="max-price" placeholder="最高价格" min="0">
  </div>
  <button class="submit" type="submit">筛选</button>
</form>

注意把action里的路由名替换成你项目中sortView对应的路由名称。

视图代码修改

原视图仅筛选了价格等于最小价格的商品,需要改用Django ORM的区间查询语法,同时增加输入合法性校验,修改后代码如下:

from decimal import Decimal # 如果price字段是DecimalField类型需要导入

def sortView(request):
    # 初始查询集为全部商品
    items = Item.objects.all()
    if request.method == "GET":
        min_price = request.GET.get('min-price')
        max_price = request.GET.get('max-price')
        
        # 处理最小价格筛选逻辑
        if min_price and min_price.isdigit():
            min_price = Decimal(min_price) # 如果是FloatField可以换成float(min_price)
            items = items.filter(price__gte=min_price)
        # 处理最大价格筛选逻辑
        if max_price and max_price.isdigit():
            max_price = Decimal(max_price) # 如果是FloatField可以换成float(max_price)
            items = items.filter(price__lte=max_price)

    return render(request, 'shop/sort.html', {'items': items})

逻辑说明

  • price__gte是Django ORM的字段查询规则,代表匹配价格大于等于传入值的商品
  • price__lte代表匹配价格小于等于传入值的商品,两个条件叠加即可筛选出处于两个价格区间内的商品
  • 增加了输入校验逻辑,仅当用户输入合法数字时才执行对应筛选,兼容用户仅输入单侧价格、输入为空的场景,避免报错

内容的提问来源于stack exchange,提问作者user16476339

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:15:04