Как правильно расширить метод Create в сериализаторе моделей?

Я хочу добавить некоторую информацию для полей модели при сохранении объекта. Например, я хочу загрузить изображение, и это должно быть единственное обязательное поле, поэтому я хочу, чтобы остальные поля (например, ширина, высота, имя и так далее) заполнялись при сохранении экземпляра.

Я так понимаю, что метод create в сериализаторе - это место, где сохраняется экземпляр модели. Но мне кажется, что копирование и вставка всего кода из начального метода create выглядит несколько чрезмерным.

Я не хочу просто переопределить метод, потому что в этом случае есть большая вероятность, что я потеряю некоторые валидации или что-то в этом роде.

Так есть ли способы расширить метод create, используя, например, super()?

Вот моя модель:

class ImageUpload(models.Model):

    name = models.CharField(max_length=150, default='test')
    url = models.URLField(default='None')
    picture = models.ImageField(upload_to='images/')
    width = models.IntegerField()
    height = models.IntegerField()
    parent_picture = models.IntegerField(default=0)

и вот мое мнение:

class UploadImageView(generics.CreateAPIView):
    serializer_class = ImageUploadSerializer

А вот мой сериализатор:

class ImageUploadSerializer(serializers.ModelSerializer):
    class Meta:
        model = ImageUpload
        fields = '__all__'

    def create(self, validated_data):
        name = 'SomeName'
        width = 'Width of the uploaded image'
        height = 'Height of the uploaded image'
        super().create(validated_data)
        instance = ImageUpload.objects.create(**validated_data, name=name, width=width, height= height)
        return instance

Заранее спасибо!

На вашем сериализаторе вы можете сделать это и вызвать default create :

class ImageUploadSerializer(serializers.ModelSerializer):
    class Meta:
        model = ImageUpload
        fields = '__all__'

    def create(self, validated_data):
        validated_data['name'] = 'SomeName'
        validated_data['width']= 120
        validated_data['height']= 120
        return super().create(validated_data)
Вернуться на верх