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',
)
}