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