Django Как исправить UnboundLocalError в Models.py
У меня возникает следующая ошибка в models.py, "except Balance.DoesNotExist: UnboundLocalError: local variable 'Balance' referenced before assignment". Как я могу исправить эту ошибку? Я пытаюсь создать сайт для ведения бухгалтерского учета. Я создал три класса в файле models.py
Models.py
class Residents(models.Model):
house_number = models.CharField(max_length=100,unique=True,primary_key=True)
name = models.CharField(max_length=100)
contact_number = PhoneNumberField()
def __str__(self):
return self.house_number + " " + self.name
class Balance(models.Model):
primary_key=True)
residents = models.OneToOneField(Residents, on_delete=models.CASCADE, primary_key=True)
date = models.DateTimeField(default=timezone.now)
previous_balance = models.DecimalField(max_digits=1000, decimal_places=2 , null=True)
transaction = models.DecimalField(max_digits=1000, decimal_places=2, null=True)
def save(self, *args, **kwargs):
current_balance = self.previous_balance + self.transaction
class Transaction(models.Model):
transaction_id = models.CharField(primary_key=True,max_length=100,unique=True)
residents = models.ForeignKey(Residents, on_delete=models.CASCADE)
created = models.DateTimeField(blank=True)
updated = models.DateTimeField(auto_now=True)
transaction_Amount = models.DecimalField(max_digits=1000, decimal_places=2)
date = models.DateTimeField()
def save(self, *args, **kwargs):
if self.created is None:
self.created = timezone.now()
try:
last_bal = Balance.objects.filter(pk = self.residents).get()
except Balance.DoesNotExist:
Balance, Created = Balance.objects.update_or_create(residents = self.residents,date=datetime.date.today(), previouse_balance=last_bal.current_balance,
transaction=self.transaction_Amount)
else:
Balance.objects.create(residents = self.residents, date=datetime.date.today(), previouse_balance=0.00,
transaction=0.00)
При совершении новой транзакции я бы хотел, чтобы система сначала проверила, совершал ли резидент транзакцию, если да, то я бы хотел обновить баланс, иначе создать новый баланс
Ошибка except Balance.DoesNotExist: UnboundLocalError: локальная переменная 'Balance' упоминается перед присвоением
>Ошибка происходит из-за этой строки:
Balance, Created = Balance.objects.update_or_create(...)
Если функция содержит код, который присваивает имя переменной (в данном случае Balance
), Python предполагает, что эта переменная является локальной во всей функции (даже если у вас есть глобальная переменная с тем же именем).
Но эта строка кода также ссылается на Balance
справа, поэтому Python ищет локальную переменную с таким именем и не находит ее, поэтому выдает ошибку.
И в данном случае я думаю, что это все равно ошибка - если бы это работало так, как вы хотели, вы бы переопределили имя Balance
, тем самым стерев определение класса, которое вы сделали ранее.
TL;DR: Используйте разные имена для этих двух локальных переменных.