Я пытаюсь выполнить массовое обновление с помощью декоратора действий, но вместо этого создаются новые данные.
Мой пример:
@action(methods=['put'], detail=False)
def car_update(self, request, *args, **kwargs):
serializer = CarSerializer(data=request.data, many=True, context={'request': request})
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
Используя мою конечную точку (/ api / car / car_update), создается новая запись.
Пример, я передаю JSON:
[
{
"id" 2,
"color": "blue",
"amount": 3
}
]
Но я получаю новое:
[
{
"id" 3,
"color": "blue",
"amount": 3
}
]
Когда я пытаюсь передать экземпляр, вот так:
...
car = Car.objects.get()
serializer = CarSerializer(instance=car, data=request.data, many=True, context={'request': request})
Я получил:
get() returned more than one Car -- it returned 13!
обновление 1
мой пример сериализатора:
class GarageSerializer(serializers.ModelSerializer):
class Meta:
model = Garage
fields = "__all__"
class CarSerializer(serializers.ModelSerializer):
class Meta:
model = Car
fields = "__all__"
мой пример просмотра:
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
@action(methods=['put'], detail=False)
def car_update(self, request, *args, **kwargs):
serializer = CarSerializer(data=request.data, many=True, context={'request': request})
if serializer.is_valid():
for instance in serializer.data:
Car.objects.get(id=instance['id']).update(**instance)
return Response(serializer.data)