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: Используйте разные имена для этих двух локальных переменных.

Вернуться на верх