Django rest framework 获得;属性错误:';QuerySet';对象没有属性'_meta&x27&引用;“关于django rest”;把「;方法
我正在尝试使用PUT方法更新记录,获取AttributeError:'QuerySet'对象没有属性'\u meta'。 My models.py: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
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_抱歉,实际上在我的原始代码中,它只是“放置”的,然后也面临同样的问题。我认为您需要将实例传递给序列化程序,而不是查询集。首先获取要更新的对象的名称,然后将其传递给序列化程序