首页 > 解决方案 > 无法在 django 项目中创建过滤器

问题描述

我想在项目中添加过滤器,但这个错误在 CMD 中出现

AttributeError: module 'rest_framework.filters' has no attribute 'DjangoFilterBackend'

项目名称 = 框架 ProjectApp 名称 = 框架

视图.py

from typing import Tuple
from django.shortcuts import render
from .serializer import TaskSerializers
from rest_framework import viewsets
from .models import Task
from rest_framework import filters
import django_filters

# Create your views here.
class myviewset(viewsets.ModelViewSet):
    queryset = Task.objects.all()
    serializer_class = TaskSerializers
    filter_backends =(filters.DjangoFilterBackend,filters.OrederingFilter)
    filter_fields=('completed',)
    ordering = ('-date_created')

已安装的应用程序:

INSTALLED_APPS = [
    'framework',
    'rest_framework',
    'django_filters',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

标签: pythondjangofilterdjango-rest-frameworkpycharm

解决方案


该类并非源自,而是源自DjangoFilterBackend模块,因此您应该将其导入为:rest_framework.filtersdjango_filters.rest_framework

from typing import Tuple
from django.shortcuts import render
from .serializer import TaskSerializers
from rest_framework import viewsets
from .models import Task
#     ↓ load from the django_filters module
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import filters
import django_filters

# Create your views here.
class myviewset(viewsets.ModelViewSet):
    queryset = Task.objects.all()
    serializer_class = TaskSerializers
    filter_backends =(DjangoFilterBackend, filters.OrderingFilter)
    filter_fields=('completed',)
    ordering = ('-date_created',)

为了使用它,您首先需要django-filter在虚拟环境中安装包:

pip install django-filter

并将其添加到INSTALLED_APPS

# settings.py

INSTALLED_APPS = [
    # …,
    'django_filters',
    # …
]

推荐阅读