python - 编写 Get 函数给我一个属性错误
问题描述
这是我的models.py
class Grade(models.Model):
grade = models.CharField(max_length=255, primary_key=True)
这是我执行get的观点(不需要post,如果也需要postmethood,我也可以运行)。
class GetGrade(generics. GenericAPIView):
'''
GET check/
'''
queryset = Grade.objects.all()
serializer_class = DataSerializer
def get(self, request, *args, **kwargs):
a_grade = Grade.objects.all()
return Response(
data=DataSerializer(a_grade).data,
status=status.HTTP_200
)
我的序列化程序如下:
class DataSerializer(serializers.ModelSerializer):
class Meta:
model = Grade
fields = ("grade",)
一切似乎都很简单。我可能正在做一些愚蠢的事情。
AttributeError at /check/
Got AttributeError when attempting to get a value for field `grade` on serializer `DataSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `QuerySet` instance.
原始异常文本是:
'QuerySet' object has no attribute 'grade'.
Request Method: GET
Request URL: http://127.0.0.1:8000/check/
Django Version: 2.1.5
Exception Type: AttributeError
Exception Value: Got AttributeError when attempting to get a value for field `grade` on serializer `DataSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `QuerySet` instance.
Original exception text was: 'QuerySet' object has no attribute 'grade'.
解决方案
像这样怎么样:
class GetGrade(generics.GenericAPIView):
def get(self, request, *args, **kwargs):
a_grade = Grade.objects.all()
return Response(
data=DataSerializer(a_grade, many=True).data, # passed many=True as known argument
status=status.HTTP_200
)
发生错误是因为您通过Queryset传递DataSerializer
。当你调用data
方法时DataSerializer
,它试图grade
从 Queryset 中获取 value 属性。这就是为什么您需要传递many=True
,以便序列化程序知道您正在传递查询集或对象列表。如果您希望序列化程序处理单个对象,那么您可以这样做:
class GetGrade(generics.GenericAPIView):
def get(self, request, *args, **kwargs):
a_grade = Grade.objects.all().first() # it will return first object of queryset
return Response(
data=DataSerializer(a_grade).data,
status=status.HTTP_200
)
最后,更简洁的方法是使用ListModelMixin。例如:
from rest_framework import mixins, generics
class GetGrade(mixins.ListModelMixin, generics.GenericAPIView):
queryset = Grade.objects.all()
serializer_class = DataSerializer
# thats it, no more code needed
推荐阅读
- mongodb - 在聚合中结合匹配过滤器
- java - 我正在尝试交换两个值,同时运行代码时出现此错误“不兼容的类型。找到:'int',需要:'int[]'”
- tensorflow - 如何将训练过程集成到不基于反向传播的 keras 中?
- java - java如何手动解析多部分/相关流
- windows - 在没有 WMI 的情况下在 VBScript 中检索进程的完整路径
- java - 获取:尝试将文件移动到文件夹时出现“java.nio.file.FileSystemException”
- python - 如何在詹金斯作业中运行具有命令行参数的python程序
- javascript - html2canvas + jsPDF IE中的多页
- python-3.x - 如果指定新行,python-docx 在查找和替换中添加返回键符号
- java - 使用 Jolt NIFI 的 JSON 到 JSON 转换?