Как вызвать свойство из значений в django

Мне нужно значение свойства, которое вызывается через вызов values, чтобы потом использовать в методе union так используемая модель

class Bills(models.Model):

    salesPerson = models.ForeignKey(User, on_delete = models.SET_NULL, null=True)
    purchasedPerson = models.ForeignKey(Members, on_delete = models.PROTECT, null=True)
    cash = models.BooleanField(default=True)
    totalAmount = models.IntegerField()
    advance = models.IntegerField(null=True, blank=True)
    remarks = models.CharField(max_length = 200, null=True, blank=True)
    created = models.DateTimeField(auto_now_add=True)
    update = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ['-update', '-created']

    def __str__(self):
        return str(self.purchasedPerson)
    
    @property
    def balance(self):
        return 0 if self.cash == True else self.totalAmount - self.advance

когда я вызываю модель как

bills = Bills.objects.all()

Я могу вызвать свойство balance как

for bill in bills:
    bill.balance

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

я вызываю метод как

bill_trans = Bills.objects.filter(purchasedPerson__id__contains = pk,
                                     cash = False).values('purchasedPerson',
                                         'purchasedPerson__name', 'cash',
                                         'totalAmount', 'id', 'created')

вместо 'totalamount' мне нужен баланс, как я могу подойти к этому шагу

вы можете annotate остаток и включить его в свою values

bill_trans = Bills.objects.filter(purchasedPerson__id__contains = pk,
                                     cash = False).annotate(balance=(F('totalAmount') - F('advance')).values('purchasedPerson',
                                         'purchasedPerson__name', 'cash',
                                         'balance', 'id', 'created')

Кроме того, я предлагал, чтобы поле advance не имело значения null и вместо этого давало default нулевое значение

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