我的基于DRF的API抛出了一个错误,我似乎无法解决,因为它不表明错误来自我的代码。
Traceback (most recent call last):
File "/opt/venv/drf_app/lib/python3.5/site-packages/django/core/handlers/exception.py", line 39, in inner
response = get_response(request)
File "/opt/venv/drf_app/lib/python3.5/site-packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/opt/venv/drf_app/lib/python3.5/site-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/opt/venv/drf_app/lib/python3.5/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
return view_func(*args, **kwargs)
File "/opt/venv/drf_app/lib/python3.5/site-packages/rest_framework/viewsets.py", line 83, in view
return self.dispatch(request, *args, **kwargs)
File "/opt/venv/drf_app/lib/python3.5/site-packages/rest_framework/views.py", line 477, in dispatch
response = self.handle_exception(exc)
File "/opt/venv/drf_app/lib/python3.5/site-packages/rest_framework/views.py", line 437, in handle_exception
self.raise_uncaught_exception(exc)
File "/opt/venv/drf_app/lib/python3.5/site-packages/rest_framework/views.py", line 448, in raise_uncaught_exception
raise exc
File "/opt/venv/drf_app/lib/python3.5/site-packages/rest_framework/views.py", line 474, in dispatch
response = handler(request, *args, **kwargs)
File "/opt/venv/drf_app/lib/python3.5/site-packages/rest_framework/mixins.py", line 40, in list
queryset = self.filter_queryset(self.get_queryset())
File "/opt/venv/drf_app/lib/python3.5/site-packages/rest_framework/generics.py", line 151, in filter_queryset
queryset = backend().filter_queryset(self.request, queryset, self)
File "/opt/venv/drf_app/lib/python3.5/site-packages/django_filters/rest_framework/filterset.py", line 28, in __init__
super(FilterSet, self).__init__(*args, **kwargs)
File "/opt/venv/drf_app/lib/python3.5/site-packages/django_filters/filterset.py", line 284, in __init__
queryset = self._meta.model._default_manager.all()
AttributeError: 'NoneType' object has no attribute '_default_manager'是rest框架代码中的错误还是来自其他地方?
仅供参考,django管理端工作正常。
下面是正在使用的模型和序列化程序:
class ListCreateRetrieveUpdateViewSet(mixins.ListModelMixin, mixins.CreateModelMixin,
mixins.RetrieveModelMixin, mixins.UpdateModelMixin,
viewsets.GenericViewSet):
"""
A viewset that provides `list`, `create`, `retrieve`, `update` actions.
"""
pass
class BaseModel(models.Model):
"""
An abstract base class model that provides self updating
``created`` and ``modified`` fields.
"""
created_on = models.DateTimeField(auto_now_add=True, editable=False)
created_by = models.ForeignKey(settings.AUTH_USER_MODEL,
related_name="%(app_label)s_%(class)s_created_by", editable=False)
modified_on = models.DateTimeField(auto_now=True, editable=False)
modified_by = models.ForeignKey(settings.AUTH_USER_MODEL,
related_name="%(app_label)s_%(class)s_modified_by", editable=False)
is_deleted = models.BooleanField(default=False, verbose_name='Delete Entry')
deleted_on = models.DateTimeField(null=True, blank=True, editable=False)
deleted_by = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="%(app_label)s_%(class)s_deleted_by",
null=True, blank=True, editable=False)
class Meta:
abstract = True
class Country(BaseModel):
"""
List of Countries
"""
code = models.CharField(max_length=3, unique=True)
title = models.CharField(max_length=100, unique=True)
def __str__(self):
return '{} - {}'.format(self.code, self.title)
class CountrySerializer(serializers.ModelSerializer):
"""Serialize model"""
class Meta:
model = Country
class CountryViewSet(viewsets.ReadOnlyModelViewSet):
"""
list and create countries
"""
end_point_name = 'CoreApp'
queryset = Country.objects.all()
serializer_class = CountrySerializer
filter_fields = ('id',)发布于 2016-10-28 18:19:59
我今天遇到了一个类似的问题:似乎从DRF3.5开始,filters classes have completely moved to django-filter package。我修正了我的import语句,一切都很顺利。希望能对你有所帮助!
内置DjangoFilterBackend的功能现在完全包含在django-filter包中。
您应该更改导入和REST框架筛选器设置,如下所示:
rest_framework.filters.DjangoFilterBackend变成了django_filters.rest_framework.DjangoFilterBackend。rest_framework.filters.FilterSet变成了django_filters.rest_framework.FilterSet。
现有的导入将继续工作,但现在正在等待弃用。
在我的例子中,最后一句话是错误的,它不起作用。
https://stackoverflow.com/questions/40253055
复制相似问题