Не работает 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 шт):
Если тебе нужно, что бы поле обновлялось автоматически, то ты можешь сделать это следующим образом
измени 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)