Я хочу вычислить общую стоимость покупки клиента из моего кода на django

Я пытаюсь вычислить общую цену товаров, когда пользователь вводит курс и количество покупаемого товара, но получаю такую ошибку: "can't multiply sequence by non-int of type 'tuple'". Моя модель приведена ниже; она включает в себя место, где я выполняю операцию получения общей цены.

from django.db import models
from django.db.models import fields
from django.db.models.deletion import CASCADE

# Create your models here.

class Items(models.Model):
    item_name = models.CharField(max_length=100)

    def __str__(self):
        return self.item_name

class Payment_Method(models.Model):
    payed_by = models.CharField(max_length=20)

    def __str__(self):
        return self.payed_by

class Daily_Sales(models.Model):
    customer_name = models.CharField(max_length=100)
    item_purchased = models.ManyToManyField(Items)
    quantity = models.IntegerField()
    rate = models.IntegerField()
    total_price = models.IntegerField(default=0)
    date_purchased = models.DateTimeField(auto_now_add=True)
    payment_method = models.ManyToManyField(Payment_Method)
    have_paid = models.BooleanField(default=False)
    date_paid = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name_plural = 'Daily_Sales'

    def __str__(self):
        return self.customer_name

    def save(self, *args, **kwargs):
        self.total_price = self.rate * self.quantity
        super(Daily_Sales, self).save(*args, **kwargs)

Ошибка; невозможно умножить последовательность на неинтовый тип 'tuple'

Корень вашей проблемы в том, что модель Daily_Sales имеет только 1 ставку, но несколько товаров. Это означает, что клиент покупает одинаковое количество каждого из нескольких различных товаров; я не думаю, что это то, чего вы хотите? Если предположить, что вы на самом деле хотите, чтобы каждая строка модели Daily_Sales имела свою собственную ставку и позицию, вы можете создать класс для строк следующим образом:

class Line_Item(models.Model):
    item_purchased = models.ForeignKey(Items, null = False, blank=False)
    rate = models.IntegerField(null = False, blank=False)

    def subtotal(self):
        return self.item_purchased * self.rate

Построчный_элемент также должен иметь связь с Daily_Sales каким-то образом; возможно, через номер заказа, или, если вы не используете номера заказов, то через имя_клиента плюс дату_покупки. Затем в функции total_price модели Daily_Sales вы получите набор элементов линии, соответствующих номеру заказа (или комбинации клиент/дата), и пройдете по нему, суммируя все промежуточные итоги.

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