Как правильно расширить метод 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)