在 Django 的视图中过滤对象 - Oscar?

Filtering Objects in a View in Django - Oscar?

尝试在 Django-Oscar 中实现对 ProductCategoryView 的简单排序查询。实施起来应该相当简单,但要花太多时间来理解。我正在重新考虑是否继续与 Oscar 合作,因为它似乎很难延期。

ProductCategoryView returns 某个类别的产品。我想根据产品模型中的某个字段对它们进行排序,比如 price。首先,我将父泛型 class 从 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

所以我必须覆盖哪些方法。每次编辑 Oscar 都会有那么多麻烦,或者我遗漏了什么吗?

P.S:我最近问了很多关于基于 Django/Oscar Class 的观点的问题。所以我可能看起来像 Help Vampire。如果是这种情况请忽略此问题。

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

Oscar 的所有浏览视图都基于搜索引擎,因此分面可用于缩小返回产品列表的范围。默认情况下有 Solr and Elasticsearch.

的搜索引擎集成

如果您不使用 Solr 或 Elasticsearch,则默认实现是 SimpleProductSearchHandler。它不使用任何外部服务,而是 calls Product.browsable.get_queryset(). That code lives in oscar.apps.catalogue.managers 并且可以定制以提供自定义订购。

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