尝试在Django-Oscar中的ProductCategoryView上实现简单的排序查询。实施起来应该很简单,但是要花太多时间才能理解。我正在考虑是否继续与奥斯卡合作,因为似乎很难扩展。
ProductCategoryView返回特定类别的产品。我想根据产品模型中的特定字段(例如price
)对它们进行排序。首先,我将父类从TemplateView
更改为ListView
,以便可以使用get_queryset
方法。然后,我重写如下的get_queryset
方法,并在其中编写一个简单的queryset。尽管流确实在get_queryset
方法内部,但仍未发生排序。
def get_queryset(self):
queryset = Product.objects.filter(categories = self.category)
logger.debug("inside")
queryset = queryset.order_by("price")
return queryset
那么我必须覆盖哪些方法。每次编辑Oscar都会有太多麻烦,还是我错过了什么?
附:我最近问了很多有关基于Django / Oscar Class的观点的问题。所以我可能看起来像Help Vampire。如果是这种情况,请忽略此问题。
最佳答案
@Anentropic是正确的,但让我详细说明一下。
Oscar的所有浏览视图均基于搜索引擎,因此可以使用构面来缩小返回的产品列表的范围。默认情况下,Solr和Elasticsearch具有搜索引擎集成。
如果您不使用Solr或Elasticsearch,则默认实现为SimpleProductSearchHandler
。它不使用任何外部服务,而是使用calls Product.browsable.get_queryset()
。该代码位于oscar.apps.catalogue.managers
中,可以进行自定义以提供自定义顺序。
所有这些都假设您不想使用搜索引擎,因为更改其他搜索处理程序类的结果顺序所需的自定义是特定于后端的。