Django rest framework 获得;属性错误:';QuerySet';对象没有属性'_meta&x27&引用;“关于django rest”;把「;方法

Django rest framework 获得;属性错误:';QuerySet';对象没有属性'_meta&x27&引用;“关于django rest”;把「;方法,django-rest-framework,Django Rest Framework,我正在尝试使用PUT方法更新记录,获取AttributeError:'QuerySet'对象没有属性'\u meta'。 My models.py: class TableInfo(models.Model): table_name = models.CharField(max_length=10) columns = JSONField(null=False) serializer.py: class TableInfoSerializer(serializers.Mode

我正在尝试使用PUT方法更新记录,获取AttributeError:'QuerySet'对象没有属性'\u meta'。 My models.py:

class TableInfo(models.Model):

    table_name = models.CharField(max_length=10)
    columns = JSONField(null=False)
serializer.py:

class TableInfoSerializer(serializers.ModelSerializer):

    class Meta:
        model = TableInfo
        fields = '__all__'
views.py:

@api_view(['GET','PUT'])
def table_info(request):
    try:
        queryset = TableInfo.objects.all()
        print("1")
    except TableInfo.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)

    if request.method == 'GET':
        print("2")
        serializer_class = TableInfoSerializer(queryset, many=True)
        return Response(serializer_class.data)

    elif request.method == 'PUT':
        print(request.data)
        serializer = TableInfoSerializer(queryset, data=request.data)

        if serializer.is_valid():
            serializer.save()
            print("4")
            return HttpResponse(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
如果序列化程序有效():
在“得到”上,我得到了结果。请帮助我使用“PUT”方法。

此错误发生在PUT中,因为序列化程序尝试访问它正在更新的模型实例上的元类,但是失败了,因为您没有传递模型实例-您正在传递注释中指示的查询集

因此,您需要传递一个实例,并指定通常通过URL传递实例id的实例。为此,最好将视图分开,并创建一个
table\u detail
视图,用于检索和更新特定实例

@api_视图(['GET','PUT']))
def表_详细信息(请求、主键):
尝试:
table_info=TableInfo.objects.get(pk=pk)#查找特定对象
除TableInfo.DoesNotExist外:
返回响应(status=status.HTTP\u 404\u未找到)
如果request.method==“GET”:
serializer\u class=TableInfoSerializer(table\u信息)
返回响应(序列化程序\u class.data)
elif request.method==“PUT”:
serializer=TableInfoSerializer(表信息,数据=request.data)
如果序列化程序.u有效():
serializer.save()
返回响应(serializer.data)
返回响应(serializer.errors,status=status.HTTP\u 400\u BAD\u请求)
然后,您的
table\u info
视图就可以处理列表操作了

@api_视图(['GET']))
def表_信息(请求):
如果request.method==“GET”:
queryset=TableInfo.objects.all()
serializer_class=TableInfoSerializer(queryset,many=True)
返回响应(序列化程序\u class.data)

错误是什么?@api_view(['GET','PATCH'])如果您想放置,请在此处添加放置。将其更新到
@api_view(['GET','PATCH','PUT'])
。它可以正常工作。@tayyab_抱歉,实际上在我的原始代码中,它只是“放置”的,然后也面临同样的问题。我认为您需要将实例传递给序列化程序,而不是查询集。首先获取要更新的对象的名称,然后将其传递给序列化程序