Django не обновляет поле ImageField

Почему Django update() не обновляет файл изображения в папке media, но обновляет все остальное в процессе обновления... Старое изображение находится в папке media, но нового изображения в папке нет... При создании (с помощью save()) все нормально... Любая помощь, спасибо заранее...

Вот класс модели:

class Company(models.Model):
    name = models.CharField(max_length=100)
    companyAddress = models.CharField(max_length=70)
    companyPhoneNumber = models.CharField(max_length=30)
    companyDescription = models.CharField(max_length=150)
    companyProfileImage = models.ImageField(upload_to='images/', default = "images/defaultCompany.jpg", null = True)

Вот код, который я использую при обновлении:

newName = request.data['name']
newAddress = request.data['address']
newPhoneNumber = request.data['phoneNumber']
newDescription = request.data['description']
newCompanyProfileImage = request.data['image']

Company.objects.filter(id = companyId).update(name = newName, companyAddress = newAddress,
                companyPhoneNumber = newPhoneNumber, companyDescription = newDescription, companyProfileImage = newCompanyProfileImage)
        

Метод .update обходит метод модели save.

Как отмечается в документах:

Файл сохраняется как часть сохранения модели в базе данных, поэтому фактическое имя файла, используемое на диске, не может быть определено до тех пор, пока модель не будет сохранена.

Поскольку вы используете .update, вы обходите метод save и поэтому изображение не сохраняется на диск.

Вы должны либо (1) использовать .save для обновления изображения ИЛИ (2) обратиться к классу хранения полей, чтобы "вручную" поместить изображение в правильное место в соответствии с настроенным бэкендом хранения (сложно, потенциально ненадежно, поэтому должно быть сделано в транзакции).

Поскольку вы обновляете только один объект, использование метода .save, вероятно, является наиболее простым решением:

obj = Company.objects.filter(id=companyId)
obj.name = newName
obj.companyAddress = newAddress
# ... etc
obj.companyProfileImage = newCompanyProfileImage
obj.save()
Вернуться на верх