Как увеличить на 1 единицу целочисленное поле при загрузке изображения?

У меня вопрос. У меня есть модель пользователя и в ней есть поля profile_image и profile_image_quantity. Могу ли я увеличить значение profile_image_quantity при загрузке изображения?
Моя модель пользователя:

class User(AbstractBaseUser):
    username                        = models.CharField(max_length=30, verbose_name="Username", help_text="Be carefully while choosing username. If you want change your username you have to pay money")
    email                           = models.EmailField(help_text="Your active email adress", verbose_name="Email", unique=True)
    first_name                      = models.CharField(max_length=20, verbose_name="First Name", help_text="Your first name")
    last_name                       = models.CharField(max_length=20, verbose_name="Last Name", help_text="Your last name")
    birthday                        = models.DateField(blank=False, null=True, help_text="Your birthday")
    date_joined                     = models.DateTimeField(auto_now_add=True)
    last_login                      = models.DateTimeField(auto_now=True)
    is_staff                        = models.BooleanField(verbose_name="Staff", default=False)
    is_admin                        = models.BooleanField(verbose_name="Admin", default=False)
    is_superuser                    = models.BooleanField(default=False)
    is_active                       = models.BooleanField(default=True)
    is_verified_account             = models.BooleanField(default=False)
    is_verified_email               = models.BooleanField(default=False, help_text="Your email still isn't verified")
    status                          = models.CharField(choices=status, default='Online', max_length=20, help_text="Your currently status")
    profile_image_quantity          = models.IntegerField(default=0)
    profile_image                   = models.ImageField(upload_to=get_profile_image_path, verbose_name="Profile Image", default=default_profile_image_path, blank=True)

Моя функция get_profile_image_path:

def get_profile_image_path(instance, filename):
    ext = filename.split('.')[-1]
    user = User.objects.get(id=instance.id)
    user.profile_image_quantity += 1
    user.save()
    return f"User/{user.pk}/profile_images/{user.profile_image_count}.{ext}"

Я бы рекомендовал вам переопределить метод save в вашей модели, сопровождаемый переопределенным методом init для хранения кэшированной версии исходного изображения профиля для проверки после отправки формы.

Тогда не имеет значения, когда и где вы редактируете модель пользователя, если вы изменили ее и сохранили, она увеличится на 1

class User(AbstractBaseUser):
    ...
    def __init__(self, *args, **kwargs):
        self._original_profile_image = self.profile_image
        super().__init__(*args, **kwargs)
    
    def save(self):
        if self.image_profile and not self._original_image_profile:
            self.profile_image_quantity += 1
        super().save()
Вернуться на верх