Django 如何在模型上使用OrderingFilter和其他Filterset筛选

Django 如何在模型上使用OrderingFilter和其他Filterset筛选,django,django-views,django-rest-framework,django-filter,Django,Django Views,Django Rest Framework,Django Filter,我有一个模型,比如说ObservedMoves。我的视图中的许多查询都引用了此模型。因此,我没有直接在每个视图中应用我想要的过滤器,而是将它们抽象到一个过滤器类中,比如说,ObservedMovesFilters,它是django_filters.Filterset的子类,并且有一个元字段model=ObservedMoves 现在我想做的是让用户在发出请求时指定ordering字段。为此,我计划使用DRF的OrderingFilter。如果我试图将OrderingFilter类子类化,而不是将

我有一个模型,比如说
ObservedMoves
。我的视图中的许多查询都引用了此模型。因此,我没有直接在每个视图中应用我想要的过滤器,而是将它们抽象到一个过滤器类中,比如说,
ObservedMovesFilters
,它是django_filters.Filterset的子类,并且有一个元字段
model=ObservedMoves

现在我想做的是让用户在发出请求时指定ordering字段。为此,我计划使用DRF的
OrderingFilter
。如果我试图将
OrderingFilter
类子类化,而不是将
Filterset
类子类化,则过滤器将无法工作。如果我再次指定
OrderingFilter
作为默认的过滤器后端,过滤器将无法工作


在DRF的文档中,给出的唯一方法是在视图内部指定备用过滤器后端,并指定排序参数,但我希望避免在查询该模型的每个视图中显式定义它。有办法吗?

您必须在
视图集中指定另一个名为
filter\u backends

filter_backends = (filters.DjangoFilterBackend,filters.OrderingFilter,)
e、 g


如果我理解正确,您不必像另一个答案所说的那样,将
filter\u backends
添加到每个
ViewSet

您只需在
settings.py
文件中设置默认过滤器后端,如下所示:

REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': (
        'rest_framework.filters.DjangoFilterBackend',
        'rest_framework.filters.OrderingFilter',
    )
}

这部分解决了问题,因为我仍然必须在每个视图或视图集中明确指定后端,但至少它可以工作。您可能可以对
ModelViewSet
(或其他)进行子分类,并添加一个
filter\u backends
字段,该字段将是您的模型的默认字段。
REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': (
        'rest_framework.filters.DjangoFilterBackend',
        'rest_framework.filters.OrderingFilter',
    )
}