【发布时间】:2021-10-26 21:57:08
【问题描述】:
我有搜索字段,我想为用户提供排序选项,以便用户可以在搜索结果中对价格从低到高到低进行排序,但无法实现 我的看法
class search_item(View):
def get(self, request):
search_item = request.GET.get('search')
if search_item:
items = Item.objects.filter(Q(name__icontains=search_item)|Q(color__icontains=search_item))
sort_by = request.GET.get("sort", "l2h")
if sort_by == "l2h":
item = items.order_by("price")
elif sort_by == "h2l":
item = items.order_by("-price")
return render(request, 'search_result.html', {'items':item})
它会进行搜索,但无法对我的代码中的错误进行排序
html
<li><a class="dropdown-item" href="?sort=l2h">Low To High</a></li>
<li><a class="dropdown-item" href="?sort=h2l">High To Low</a></li>
我的模特
class Item(models.Model):
categories = models.ForeignKey(Categories, on_delete=models.CASCADE, related_name='our_items')
subcategories = models.ForeignKey(Subcategories, on_delete=models.CASCADE, related_name='products')
name = models.CharField(max_length=200, blank=False)
swag = models.BooleanField(blank=False, default=False)
male = models.BooleanField(blank=False, default=False)
female = models.BooleanField(blank=False, default=False)
unisex = models.BooleanField(blank=False, default=False)
first = models.ImageField(upload_to='items', blank=False)
second = models.ImageField(upload_to='items', blank=False)
third = models.ImageField(upload_to='items', blank=True)
color = models.CharField(max_length=30, blank=False, default='Black')
material = models.CharField(max_length=50, blank=False, default='Plastic' )
price = models.FloatField(blank=False,)
description = models.TextField(blank=True)
@staticmethod
def get_items_by_id(ids):
return Item.objects.filter(id__in = ids)
def __str__(self):
return self.name
我的网址
path('search-result/',search_item.as_view(),name='search')
当我按重新使用的商品价格进行排序时出错 视图 products.views.search_item 没有返回 HttpResponse 对象。它返回 None 。
追溯
Traceback (most recent call last):
File "C:\Users\mithlesh\Desktop\coolbuy2.0\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\mithlesh\Desktop\coolbuy2.0\lib\site-packages\django\core\handlers\base.py", line 188, in _get_response
self.check_response(response, callback)
File "C:\Users\mithlesh\Desktop\coolbuy2.0\lib\site-packages\django\core\handlers\base.py", line 309, in check_response
raise ValueError(
Exception Type: ValueError at /search-result/
Exception Value: The view products.views.search_item didn't return an HttpResponse object. It returned None instead.
查看哪些排序工作非常好
class Product(View):
def get(self, request, subcategory_id):
subcategory = get_object_or_404(Subcategories, pk=subcategory_id)
sort_by = request.GET.get("sort", "l2h")
if sort_by == "l2h":
products = subcategory.products.order_by("price")
elif sort_by == "h2l":
products = subcategory.products.order_by("-price")
sort_by = request.GET.get("sort", "newest")
if sort_by == "unisex":
products = subcategory.products.order_by("-unisex")
elif sort_by == "newest":
products = subcategory.products.order_by("-update_at")
sort_by = request.GET.get("sort", "male")
if sort_by == "male":
products = subcategory.products.order_by("-male")
elif sort_by == "female":
products = subcategory.products.order_by("-female")
category_list = Categories.objects.all()
return render (request, 'products.html',{"subcategory_list" : products, 'category_list': category_list })
【问题讨论】:
-
您访问的网址到底是什么?
-
您是说从低到高有效,但从高到低无效?或者它根本不按价格排序?
sort_by在每种情况下都是正确的值吗? -
我不太了解 Django,无法理解事物是如何连接的,但如果 search_item 为假,您的 get() 方法会隐式返回 None。你在这里做过调试吗?您确定您的 filter/order_by 代码实际上正在执行吗?至少,如果 search_item 为 false 或
raise Http404(...)或其他 HTTP 响应对象,您的 get 函数可能应该返回一些内容。 -
它们略有不同。您的产品/视图/获取代码不是有条件的。您的 search_item/view/get 代码 是 有条件的 - 它的条件是 search_item 是真实的。请记录 search_item 的值,同时记录
items(在过滤器调用之后)和item(在 order_by 调用之后)的值。 -
你能添加请求的调试信息吗?
标签: django django-views django-class-based-views