Эта ошибка возникает с PUT, потому что сериализатор пытается получить доступ к мета-классу на экземпляре модели, который он обновляет, но завершается неудачно, потому что вы не передаете экземпляр модели - вы передаете набор запросов, как указано в комментариях.
Таким образом, вам нужно передать экземпляр и указать, какой экземпляр вы обычно будете передавать идентификатору экземпляра через URL.Для этого вам лучше всего выделить ваши представления и создать представление table_detail
для извлечения и обновления конкретного экземпляра.
@api_view(['GET','PUT'])
def table_detail(request, pk):
try:
table_info = TableInfo.objects.get(pk=pk) # Lookup a specific object
except TableInfo.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
if request.method == 'GET':
serializer_class = TableInfoSerializer(table_info)
return Response(serializer_class.data)
elif request.method == 'PUT':
serializer = TableInfoSerializer(table_info, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Ваше представление table_info
может затем просто обрабатывать операцию списка.
@api_view(['GET'])
def table_info(request):
if request.method == 'GET':
queryset = TableInfo.objects.all()
serializer_class = TableInfoSerializer(queryset, many=True)
return Response(serializer_class.data)