Сброс поля Avatar ImageField по умолчанию, когда пользователь очищает аватар через DRF или Django Admin

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

models.py

class Profile(models.Model):
    AVATAR_UPLOAD_TO = "account_avatar/"
    DEFAULT_AVATAR = "default.jpg"

    user = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
    avatar = sorl.thumbnail.ImageField(upload_to=AVATAR_UPLOAD_TO, default=AVATAR_UPLOAD_TO+DEFAULT_AVATAR, blank=True, null=True)

Я вижу некоторые связанные вопросы Django ImageField перезаписывает существующий путь, если он пуст. Но это поведение не совсем то, что я хочу. Этот ответ требовал от пользователя загрузить новый аватар, поэтому пользователь не мог очистить свой аватар. Еще один смежный вопрос Django - Как вернуть поля модели к значению по умолчанию? . Но я не могу реализовать метод save() на моих моделях

Я пытался реализовать метод save() на модели Profile, но он не работает так, как ожидалось

def save(self, *args, **kwargs):
    if not self.avatar.name:
        setattr(self, 'avatar.name', self.avatar.field.default)

    super().save(*args, **kwargs)  # Call the "real" save() method.

Я новичок в Django и Django Rest Framework. Пожалуйста, помогите мне, я застрял с этой проблемой несколько дней назад. Не могли бы вы помочь с моей проблемой. Заранее спасибо!

Вы просто пропустили незначительный код вот как вы можете продолжить в save() методе

class Profile(models.Model):
    AVATAR_UPLOAD_TO = "account_avatar/"
    DEFAULT_AVATAR = "default.jpg"

    user = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
    avatar = sorl.thumbnail.ImageField(upload_to=AVATAR_UPLOAD_TO, 
    default=AVATAR_UPLOAD_TO+DEFAULT_AVATAR, blank=True, null=True)

    def save(self, *args, **kwargs):
        if not self.avatar:
            self.avatar = self.AVATAR_UPLOAD_TO + self.DEFAULT_AVATAR
        super(Profile,self).save(*args, **kwargs)  # Call the "real" save() method.
Вернуться на верх