【问题标题】:AttributeError: 'module' object has no attribute 'DjangoFilterBackend'AttributeError:“模块”对象没有属性“DjangoFilterBackend”
【发布时间】:2018-04-12 11:52:56
【问题描述】:

我正在使用 django-filter,但出现以下错误:“模块”对象没有属性“DjangoFilterBackend” 我在下面发送我的代码:

Model.py

    from django.db import models

# Create your models here.
class searchModel(models.Model):
    email = models.CharField(max_length=25)
    password = models.CharField(max_length=10)
    image    = models.ImageField(upload_to='Image/')

    def __str__(self):
        return "%s" %  self.email

serializers.py

from rest_framework import serializers
from .models import searchModel

class searchserializer(serializers.ModelSerializer):
    image = serializers.ImageField(max_length=None, use_url=True)

    class Meta:
        model=searchModel
        fields=('email','password','image')

Views.py

from rest_framework import viewsets
from .models import searchModel
from .serializers import searchserializer
#from django_filters.rest_framework import filters
from rest_framework import filters

class searchView(viewsets.ModelViewSet):
    queryset=searchModel.objects.all()
    serializer_class = searchserializer
    filter_backends = (filters.DjangoFilterBackend,filters.OrderingFilter,)
    filter_fields = ('email')
    ordering = ('email')

【问题讨论】:

  • 如果你只想通过电子邮件过滤,你可以覆盖你的searchView中的get_queryset。

标签: django django-filter


【解决方案1】:

使用来自rest framework docs 的建议导入,您可以:

import django_filters.rest_framework

class searchView(viewsets.ModelViewSet):
    ...
    filter_backends = (django_filters.rest_framework.DjangoFilterBackend,filters.OrderingFilter,)

或者,你可以这样做

from django_filters.rest_framework import DjangoFilterBackend

class searchView(viewsets.ModelViewSet):
    ...
    filter_backends = (DjangoFilterBackend, filters.OrderingFilter,)

【讨论】:

  • “不工作”信息不足以帮助您。
【解决方案2】:

它会为你工作 检查以下代码:

from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import filters

class TaskViewSet(viewsets.ModelViewSet):
  queryset = Task.objects.all().order_by('-date_created')
  serializer_class = TaskSerializers
  filter_backends = (DjangoFilterBackend, filters.OrderingFilter)

【讨论】:

  • from rest_framework import viewsets from .models import searchModel from .serializers import searchserializer #from django_filters.rest_framework import filters from django_filters.rest_framework import DjangoFilterBackend from rest_framework import filters class searchView(viewsets.ModelViewSet): queryset=searchModel .objects.all() serializer_class= searchserializer filter_backends = (DjangoFilterBackend,filters.OrderingFilter) filter_fields = ('email') ordering = ('email')
【解决方案3】:

使用此导入即可:

import django_filters.rest_framework
filter_backends = (django_filters.rest_framework.DjangoFilterBackend,)

【讨论】:

    【解决方案4】:

    同样——原因是 FilterSet 是 django_filters 的一部分,而不是 rest_framekwork,所以:

    ...

    删除“从 rest_framework 导入过滤器”行

    ... from django_filters import FilterSet, AllValuesFilter, DateTimeFilter, NumberFilter

    【讨论】:

      猜你喜欢
      • 2010-11-18
      • 2018-08-28
      相关资源
      最近更新 更多