Я хочу вычислить общую стоимость покупки клиента из моего кода на 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 вы получите набор элементов линии, соответствующих номеру заказа (или комбинации клиент/дата), и пройдете по нему, суммируя все промежуточные итоги.