Я изучаю рамки отдыха django и хотел бы создать функцию. В этой функции мне нужно передать список в JSON и обновить его по сериализатору.
Для справки я написал пример кода ниже.
Пример Serialzer:
class GarageViewSet(viewsets.ModelViewSet):
queryset = Garage.objects.all()
serializer_class = GarageSerializer
model = Garage
class CarViewSet(RestrictedQuerysetMixin, viewsets.ModelViewSet):
queryset = Car.objects.all()
serializer_class = CarSerializer
model = Car
Хорошо. Мне нужно обновить список автомобилей через гаражный сериализатор. Я думаю что-нибудь вроде этого:
(пример просмотра)
class GarageViewSet(viewsets.ModelViewSet):
queryset = Garage.objects.all()
serializer_class = GarageSerializer
model = Garage
@action(detail=True, methods=['put'])
def update_car(self, request):
...
serializer = CarSerializer(queryset, many=True)
...
return Response(serializer.data)
Попытка 1:
В поиске и чтении документа я попробовал так:
@action(methods=['put'], detail=False)
def update_car(self, request, *args, **kwargs):
if request.method == 'PUT':
data = JSONParser().parse(request)
serializer = CarSerializer(data=data, many=True)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data)
return JsonResponse(serializer.errors, status=400)
Но я получил эту ошибку:
non_field_errors:
["Expected a list of items but got type "dict"."]
Попытка 2:
С @fxgx я тоже пробовал:
def update_car(self, request):
serializer = CarSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
validated_data = dict(list(serializer.validated_data.items()))
queryset = Car.objects.update(**validated_data)
return Response(CarSerializer(queryset, many=True).data)
Но я получил эту ошибку:
{
"detail": "Not found."
}