Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 编写Get函数会导致属性错误_Python_Django - Fatal编程技术网

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获取value
grade
属性。这就是为什么您需要传递
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(此建议不起作用)。