导入错误:无法导入名称“DjangoFilterBackend”

JPG*_*JPG 3 django django-filter django-rest-framework

升级到Django REST framework 3.7我后出现以下错误

  File "/home/jpg/Projects/django2x/sample/views.py", line 24, in <module>
    from rest_framework.filters import DjangoFilterBackend
ImportError: cannot import name 'DjangoFilterBackend'
Run Code Online (Sandbox Code Playgroud)

这是我的观点

from rest_framework.filters import DjangoFilterBackend
from rest_framework import viewsets


class FooViewSet(viewsets.ModelViewSet):
    queryset = Foo.objects.all()
    serializer_class = Foo_Serializer
    filter_backends = (DjangoFilterBackend,)
    filter_fields = ('foo_bar', 'bar_foo')
Run Code Online (Sandbox Code Playgroud)

JPG*_*JPG 8

rest_framework.filters.DjangoFilterBackendDRF 中被弃用:3.7

所以从DRF 3.7以后你应该安装django-filter包来DjangoFilterBackend在视图中使用。


您可以将< DRF 3.6样式过滤器更新为,

from rest_framework import viewsets
from django_filters import rest_framework as filters


class FooViewSet(viewsets.ModelViewSet):
    queryset = Foo.objects.all()
    serializer_class = Foo_Serializer
    filter_backends = (filters.DjangoFilterBackend,)
    filterset_fields = ('foo_bar', 'bar_foo')
Run Code Online (Sandbox Code Playgroud)

注意:filter_fields属性filterset_fields在较新版本的 django-filter 中更改为