对Django中多个模型的总金额进行汇总
我问题的标题已经说明了一切。我有多个模型,我想把总数加起来,得出总数,这是我的代码对Django中多个模型的总金额进行汇总,django,django-models,django-views,Django,Django Models,Django Views,我问题的标题已经说明了一切。我有多个模型,我想把总数加起来,得出总数,这是我的代码 class FurnitureItem(models.Model): fur_title = models.CharField(max_length=200) fur_price = models.FloatField() fur_discount_price = models.FloatField(blank=True, null=True) fur_pictures = mo
class FurnitureItem(models.Model):
fur_title = models.CharField(max_length=200)
fur_price = models.FloatField()
fur_discount_price = models.FloatField(blank=True, null=True)
fur_pictures = models.ImageField(upload_to='Pictures/', blank=True)
label = models.CharField(choices=LABEL_CHOICES, max_length=1)
category = models.CharField(choices=CATEGORIES_CHOICES, max_length=24)
fur_descriptions = models.TextField()
slug = models.SlugField()
date = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.fur_title
class FurnitureOrderItem(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
fur_ordered = models.BooleanField(default=False)
item = models.ForeignKey(FurnitureItem, on_delete=models.CASCADE)
quantity = models.IntegerField(default=1)
def __str__(self):
return f"{self.quantity} of {self.item.fur_title}"
....
def get_final_fur_price(self):
if self.item.fur_discount_price:
return self.get_total_discount_fur_price()
return self.get_total_item_fur_price()
class FurnitureOrder(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
fur_items = models.ManyToManyField(FurnitureOrderItem)
date_created = models.DateTimeField(auto_now_add=True)
ordered_created = models.DateTimeField()
fur_ordered = models.BooleanField(default=False)
def __str__(self):
return self.user.username
def get_total_fur_everything(self):
total = 0
for fur_order_item in self.fur_items.all():
total += fur_order_item.get_final_fur_price()
return total
class GraphicItem(models.Model):
graphic_title = models.CharField(max_length=200)
graphic_price = models.FloatField()
graphic_discount_price = models.FloatField(blank=True, null=True)
graphic_pictures = models.ImageField(upload_to='Pictures/', blank=True)
label = models.CharField(choices=LABEL_CHOICES, max_length=1)
category = models.CharField(choices=CATEGORIES_CHOICES, max_length=24)
graphic_descriptions = models.TextField()
slug = models.SlugField()
date = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.graphic_title
class GraphicOrderItem(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
graphic_ordered = models.BooleanField(default=False)
item = models.ForeignKey(GraphicItem, on_delete=models.CASCADE)
quantity = models.IntegerField(default=1)
def __str__(self):
return f"{self.quantity} of {self.item.graphic_title}"
....
def get_final_graphic_price(self):
if self.item.graphic_discount_price:
return self.get_total_discount_graphic_price()
return self.get_total_item_graphic_price()
class GraphicOrder(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
graphic_items = models.ManyToManyField(GraphicOrderItem)
date_created = models.DateTimeField(auto_now_add=True)
ordered_created = models.DateTimeField()
graphic_ordered = models.BooleanField(default=False)
def __str__(self):
return self.user.username
def get_total_graphic_everything(self):
total = 0
for graphic_order_item in self.graphic_items.all():
total += graphic_order_item.get_final_graphic_price()
return total
我试着总结家具和图形的数量
class TotalAmount(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
graphic_items = models.ManyToManyField(GraphicOrderItem)
fur_items = models.ManyToManyField(FurnitureOrderItem)
date_created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.user.username
def amount(self):
return self.graphic_items.get_total_graphic_everything() + self.fur_items.get_total_fur_everything()
然后我的观点是这样的:
class Summary(LoginRequiredMixin, View):
def get(self, *args, **kwargs):
try:
fur_order = FurnitureOrder.objects.get(user=self.request.user, fur_ordered=False)
graphic_order = GraphicOrder.objects.get(user=self.request.user, graphic_ordered=False)
amount = TotalAmount.objects.get(user=self.request.user)
context = {
'fur_order':fur_order,'graphic_order':graphic_order,'amount':amount}
return render(self.request, 'business/home-order-summary.html', context)
谢谢您的时间,我不知道代码很长,但我想解释得更好。看起来您发布了一个解决方案。这个代码不起作用吗?@Alex Vyushkov,我还没找到答案,因为我试图将我的金额传递到我的模板中,但我得到了一个空白页。以下是我在模板中所做的:
{%for amount%}{{amount.amount}{%endfor%}
但我的模板(web浏览器)上似乎没有显示任何内容摘要中的get
函数看起来不正确<代码>在不使用的情况下尝试
,除非
无效。也许在调试这个问题时删除试试?@Alex Vyushkov,据我所知,你说我应该取消get函数,对吗?如果我不打扰你,你能做一个小说明吗?我将不胜感激。Thanks@AlexVyushkov,我现在明白你的意思了,但是get函数将self作为一个参数,这就是为什么在我的try语句中,你可以看到类似于fur\u order=FurnitureOrder.objects.get(user=self.request.user,fur\u order=False)的东西(user=self.request.user,graphic\u ordered=False)
。谢谢,欢迎任何意见