2

试图在 Django-Oscar 中的ProductCategoryView上实现一个简单的排序查询。实现起来应该相当简单,但是要花太多时间来理解。我正在重新考虑是否继续与奥斯卡合作,因为它似乎难以扩展。

ProductCategoryView返回某个类别的产品。我想根据产品模型中的某些字段对它们进行排序,比如price。首先,我将父泛型类从更改为TemplateViewListView以便我可以使用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

那么我必须覆盖哪些方法。每次编辑奥斯卡都会有这么多麻烦还是我错过了什么?

PS:我最近问了很多关于 Django/Oscar Class based view 的问题。所以我可能看起来像一个帮助吸血鬼。如果是这种情况,请忽略这个问题。

4

1 回答 1

2

@Anentropic 是对的,但让我详细说明一下。

Oscar 的所有浏览视图都基于搜索引擎,因此可以使用 faceting 来缩小返回的产品列表。默认情况下,SolrElasticsearch有搜索引擎集成。

如果您不使用 Solr 或 Elasticsearch,则默认实现是SimpleProductSearchHandler. 它不使用任何外部服务,而是调用Product.browsable.get_queryset(). 该代码存在oscar.apps.catalogue.managers并且可以定制以提供自定义排序。

这一切都假设您不想使用搜索引擎,因为更改其他搜索处理程序类的结果顺序所需的自定义是后端特定的。

于 2015-08-13T10:14:55.153 回答