Python 编写Get函数会导致属性错误
这是我的模特Python 编写Get函数会导致属性错误,python,django,Python,Django,这是我的模特 class Grade(models.Model): grade = models.CharField(max_length=255, primary_key=True) 这是我执行get的视图(不需要post,如果也需要post方法,我可以运行) 我的序列化程序如下所示: class DataSerializer(serializers.ModelSerializer): class Meta: model = Grade fie
class Grade(models.Model):
grade = models.CharField(max_length=255, primary_key=True)
这是我执行get的视图(不需要post,如果也需要post方法,我可以运行)
我的序列化程序如下所示:
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'.
在Serailizers.py中,需要使用model方法从API中的模型获取对象:
class GetGrade(generics. GenericAPIView):
'''
GET check/
'''
model = Grade # <---Add This in place queryset
serializer_class = DataSerializer
class GetGrade(generics.GenericAPIView):
'''
支票/
'''
model=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
)
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
)
发生错误的原因是您正在传递一个数据序列化程序
。当您调用DataSerializer
的data
方法时,它试图从Queryset获取valuegrade
属性。这就是为什么您需要传递many=True
,以便序列化程序知道您正在传递queryset或list a对象。如果希望序列化程序处理单个对象,则可以这样做:
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
)
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
)
最后,使用更干净的方法。例如:
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
你得到了什么错误?@Shubhankar你能分享整个stacktrace吗?我已经给出了一个详细的错误我按照你的建议做了,错误完全一样。不确定其背后的原因是什么添加了许多确实有意义,但不确定最后一个建议,尽管使用了mixin(此建议不起作用)。