Не работает property в Django models

Не получается написать property для модели. Данные не обновляются в админ панеле. Хочу что бы когда вводилось пользователем значение оно автоматически увеличивалось на 222

class Transaction(models.Model):
    t_purpose = models.CharField(max_length=255, blank=False, null=False)
    current_cashlesser = models.FloatField(default=0.00, null=True)

    def _get_amount_count(self, amount):
        amount += 222
        return amount

    @property
    def _current_cashlesser(self):
        return self._get_amount_count(self.current_cashlesser)

Пытался ещё вот так.

class Transaction(models.Model):
    t_purpose = models.CharField(max_length=255, blank=False, null=False)
    current_cashlesser = models.FloatField(default=0.00, null=True)
   
    @property
    def _current_cashlesser(self):
        self.current_cashlesser += 222
        return self.current_cashlesser

Ответы (1 шт):

Автор решения: Andrey Maslov

Если тебе нужно, что бы поле обновлялось автоматически, то ты можешь сделать это следующим образом измени save в твоем классе Transaction

class Transaction(models.Model):
...
    def save(self, *args, **kwargs):
        if self.current_cashlesser:
            self.current_cashlesser += 222
        return super().save(*args, **kwargs)

минус этого подхода в том, что у тебя поле будет обновлятся каждый раз когда ты будешь сохранять объект(не только когда эти данные вводит пользователь)

если ты хочешь, что бы оно увеличивалось, только тогда когда вводит пользователь, тогда добавь увеличение этого поля в форму редактирования (можно в save можно в clean, сделаю для разнообразия в clean)

class TransactionEditForm(forms.ModelForm):
    class Meta:
        model = Transaction

    def clean(self):
       cleaned_data = super().clean()
       current_cashlesser = cleaned_data.get('current_cashlesser')
       if current_cashlesser and len(self.errors) == 0:
          cleaned_data['current_cashlesser'] = current_cashlesser + 222
       return cleaned_data

теперь если ты редактируешь это поле из админки то в admin.py добавь что будешь использовать эту форму при редактировании

class TransactionAdmin(admin.ModelAdmin):
    form = TransactionEditForm


admin.site.register(Transaction, TransactionAdmin)
→ Ссылка