ImageField не обновляется при использовании метода update() в Django Serializer

Я хочу дать администратору возможность обновлять изображение, связанное с записью продукта. У меня есть класс редактирования, который позволяет администратору обновлять различные элементы записи, все из которых обновляются правильно, за исключением полей изображения. Проблема в том, что загрузка изображения работает при создании, но не при обновлении.

Модель:

image1 = models.ImageField(db_column='product_image1', null=True, blank=True, upload_to='media/images/')

Serializer :

class products_update(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields =['category','product_name','description','unit_price','dis_price','image1','image2','image3']

Виды :

POST

Product.objects.create(product_name=productname,
                            description=description, quantity=quantity, unit_price=unitprice,
                            dis_price=discountprice,user=usertable, category=categoryid, image1=image1)

Изображение успешно загружено в папку media и путь к нему сохранен в базе данных.

PUT

Product.objects.filter(id=pid, user=userdata).update(category = category, product_name=productname, description=description,unit_price=unitprice, dis_price=discountprice, image1=image1

Когда я использую метод Update, путь изображения сохраняется в DB, но изображение не сохраняется в папке Media.

у кого-нибудь есть идея, как решить эту проблему

<queryset>.update(...) только добавляет вид аннотаций к queryset и влияет только на генерацию SQL запросов и не вызывает метод model.save. Однако только model.save оперирует с экземплярами модели и вызывает метод fields save, который достигает файлового хранилища . Кверисет (<model>.objects.filter().update()) не может ничего делать с файловыми хранилищами.

Поэтому вместо написания запроса обновления следует инстанцировать экземпляр модели и сохранить его. В документации DRF есть примеры реализации сериализаторов, которые сохраняют экземпляры (как экземпляры модели, а не прямое обновление БД)

Вы используете ModelSerializer, который по умолчанию вызывает instance.save в update реализации метода , поэтому непонятно, как вы пришли к своей реализации. Просто следуйте документации и позвольте model.save произойти.

Вернуться на верх