Как обновить значение другой модели в Django Models

я хочу, чтобы поле Contract_bills_amount в классе contract обновлялось из поля bills_mount в классе bills

#Contract

class Contract(models.Model):

Contract_code = models.CharField(max_length=200)
Contract_rec = models.DateTimeField('contract date ')
Contract_total_amount = models.FloatField('total amount')
Contract_deposit= models.FloatField('deposit')
Contract_remainder_amount=models.FloatField('Contract remainder amount',null=True,blank=True)
Contract_bills_amount=models.FloatField('bills_amount',null=True,blank=True)
Contract_owner = models.ForeignKey(Client, on_delete=models.CASCADE)
Contract_car = models.ForeignKey(Car, on_delete=models.CASCADE)


def save(self, *args,**kwargs):
    
    a=self.Contract_total_amount
    b=self.Contract_deposit
    
    self.Contract_remainder_amount=a-b
    super(Contract,self).save(*args,**kwargs)


def __str__(self):
        return self.Contract_code

#Bills

class bills(models.Model):

bills_Contract = models.ForeignKey(Contract, on_delete=models.CASCADE)
Contract_owner = models.ForeignKey(Client, on_delete=models.CASCADE)
bills_code = models.CharField(max_length=200)
Contract_rec = models.DateTimeField('date')
bills_mount= models.FloatField('amount')




def __str__(self):
        return self.bills_code

strong text

У вас уже есть связь внешнего ключа между Contract и Bills как "bills_Contract". Что еще вам нужно? Вам нужно только сослаться на значение связанной таблицы.

Пример:

one_contract = Contract.objects.get(pk=1) #get the first contract
all_bills = one_contract.bills_set.all() #get all the bills in the first contract
desired_bill = all_bills.filter(bills_mount=400) #get bills amounting to 400

Таким образом, поле "Contract_bills_amount" в Contracts вообще не нужно, поскольку вы уже можете получить к нему доступ через обратные отношения.

Я вижу, что у вас есть ссылка на Client в обоих Contract и Bills (возможно, для удобства, но эта циклическая ссылка не нужна, поскольку модели контракта идентифицируют владельца)

Эта связь (т.е. Bill --> Contract --> Client) подразумевает, что вы также получаете счет от клиента, например: Bill <-- Contract <-- Client.

Вам необходимо узнать больше о ссылках на связанные объекты в django

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