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
相关产品推荐
相关产品推荐

