Что я делаю в таких ситуациях, так это имею другой сериализатор, который наследуется от базового сериализатора и переопределяет соответствующие поля.Так что в вашем случае такой подход должен работать:
class CreateSerializer(serializers.Serializers):
field = serializers.CharField(max_length=100)
class UpdateSerializer(CreateSerializer):
field = serializers.CharField(max_length=100, required=False)
И, на ваш взгляд, верните соответствующий сериализатор:
def get_serializer_class(self):
if self.request.action == "POST":
return CreateSerializer
elif self.request.action in ["PUT", "PATCH"]:
return UpdateSerializer
Я думаю, что это хороший подход, потому чтовам может понадобиться добавить дополнительную логику в будущем на основе метода запроса.Это также более читабельно, чем обезьяна, исправляющая атрибут required
поля.