Django 2.0 第一类视图报错:AttributeError: 'str' object has no attribute 'values'
排查Django REST Framework中AttributeError: 'str' object has no attribute 'values'的问题
嘿,我来帮你捋捋这个问题——这个错误几乎都是因为把字符串当成了模型类/查询集对象传给了DRF的视图或序列化器,导致框架在调用values()这类查询集方法时出错。咱们从几个常见的排查点入手:
1. 检查序列化器的Meta.model配置
这是最容易踩的坑:如果你在ModelSerializer的Meta类里,把model写成了字符串(比如"myapp.MyModel"),而不是导入实际的模型类,DRF就会把它当成普通字符串处理,后续执行到需要模型查询的逻辑时就会报错。
❌ 错误写法:
class MyModelSerializer(ModelSerializer): class Meta: model = "myapp.MyModel" # 这里用了字符串,不是实际的模型类 fields = "__all__"
✅ 修正写法:
from myapp.models import MyModel # 先导入模型类 class MyModelSerializer(ModelSerializer): class Meta: model = MyModel fields = "__all__"
2. 检查视图的queryset属性
如果你的通用视图(比如你写的StandardRudApiView)里,queryset被赋值成了字符串(比如"MyModel.objects.all()"),而不是实际的查询集对象,也会触发这个错误。DRF需要的是QuerySet实例,不是字符串形式的代码。
❌ 错误写法:
class StandardRudApiView(generics.RetrieveUpdateDestroyAPIView): queryset = "MyModel.objects.all()" # 错误:字符串不是查询集 serializer_class = MyModelSerializer
✅ 修正写法:
from myapp.models import MyModel class StandardRudApiView(generics.RetrieveUpdateDestroyAPIView): queryset = MyModel.objects.all() # 这里是实际的QuerySet对象 serializer_class = MyModelSerializer
3. 检查重写的get_queryset()方法
如果你在视图里重写了get_queryset(),不小心返回了字符串(比如调试时的遗留代码、拼写错误),同样会导致这个问题。
❌ 错误写法:
class StandardListMixinCreateApiView(mixins.CreateModelMixin, generics.ListAPIView): serializer_class = MyModelSerializer def get_queryset(self): # 错误:返回了字符串而非QuerySet return "MyModel.objects.filter(created_by=self.request.user)" def post(self, request, *args, **kwargs): return self.create(request, *args, **kwargs)
✅ 修正写法:
class StandardListMixinCreateApiView(mixins.CreateModelMixin, generics.ListAPIView): serializer_class = MyModelSerializer def get_queryset(self): return MyModel.objects.filter(created_by=self.request.user) # 返回QuerySet def post(self, request, *args, **kwargs): return self.create(request, *args, **kwargs)
另外,你给出的StandardRudApiView代码没写完,记得确保它正确继承了generics.RetrieveUpdateDestroyAPIView,并且配置好queryset和serializer_class这两个核心属性哦。
内容的提问来源于stack exchange,提问作者Steffen22
相关产品推荐
相关产品推荐

