Django Rest Framework - Напишите явный метод `.update()` для сериализатора
Я пытаюсь сделать запрос put с помощью DRF, но появляется эта ошибка:
AssertionError: The `.update()` method does not support writable dotted-source fields by default.
Write an explicit `.update()` method for serializer `model.serializers.ModelSerializer`, or set `read_only=True` on dotted-source serializer fields.
Вот такой вид:
class Model(GenericAPIView):
def put(self, request, pk):
model = MyModel.objects.filter(id=pk).first()
serializer = ModelSerializer(model, data=request.data, partial=True)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Это сериализатор:
class ModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = '__all__'
def update(self, instance, validated_data):
status = validated_data.pop('status', None)
model = super().update(instance, validated_data)
if status:
model.set_status(status)
model.save()
return model
Что не так с методом update()? Также, как я могу обновить только одно поле объекта?