我想从我的 django 代码中计算客户购买的总价



我试图计算项目的总价,当用户在购买的项目的比率和数量键入,但我得到这个错误:"不能乘序列的非int类型'元组'"我的模型如下;它包括我在哪里执行获得总价的操作。

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)

因此误差;不能将序列乘以'元组'类型的非整型

问题的根源是模型Daily_Sales只有一个比率,但有多个项目。这就意味着顾客会购买相同数量的不同商品;我觉得这不是你想要的?假设您实际上希望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

Line_Item也应该有一个链接到Daily_Sales;可能通过订单号,或者如果你不使用顺序数字,然后通过customer_name + date_purchased。然后,在Daily_Sales模型total_price函数中,您将获得与订单号(或客户/日期组合)匹配的line_items的查询集,并对其进行迭代,将每个小计相加。

最新更新