如何从多订单模型中获取项目总和模型?

2024-04-26 01:11:24 发布

您现在位置:Python中文网/ 问答频道 /正文

付款后,我正在尝试获取已售出商品的总数量

订单付款时,ordered=models.BooleanField(默认值=False)变为True

我写的代码,使我有点接近我想要的,但我得到的是总订单数量与项目,而不是总数量的订单

我还试图在订购的商品中添加数量,但我得到一个'Item' object has no attribute 'orderitem',因此我对其进行了注释,以供参考

这是项目模型

class Item(models.Model):
    title = models.CharField(max_length=100)

    def __str__(self):
        return self.title

    @property
    def count_sold(self):
        return self.orderitem_set.filter(ordered=True).count()
        # return self.OrderItem.quantity_set.filter(ordered=True).count()

以下是OrderItem模型:

class OrderItem(models.Model):
    ordered = models.BooleanField(default=False)
    item = models.ForeignKey(Item, on_delete=models.CASCADE)
    quantity = models.IntegerField(default=1)

这是订单模型

class Order(models.Model):
    items = models.ManyToManyField(OrderItem)

这是模板

<tr>
td>No. of Sold:</td>
<td>{{ item.count_sold  }}</td>
</tr>

完全回溯

Traceback (most recent call last):
  File "C:\Users\Ahmed\Desktop\Project 4.3\venv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\Ahmed\Desktop\Project 4.3\venv\lib\site-packages\django\core\handlers\base.py", line 145, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\Ahmed\Desktop\Project 4.3\venv\lib\site-packages\django\core\handlers\base.py", line 143, in _get_response
    response = response.render()
  File "C:\Users\Ahmed\Desktop\Project 4.3\venv\lib\site-packages\django\template\response.py", line 106, in render
    self.content = self.rendered_content
  File "C:\Users\Ahmed\Desktop\Project 4.3\venv\lib\site-packages\django\template\response.py", line 83, in rendered_content
    content = template.render(context, self._request)
  File "C:\Users\Ahmed\Desktop\Project 4.3\venv\lib\site-packages\django\template\backends\django.py", line 61, in render
    return self.template.render(context)
  File "C:\Users\Ahmed\Desktop\Project 4.3\venv\lib\site-packages\django\template\base.py", line 171, in render
    return self._render(context)
  File "C:\Users\Ahmed\Desktop\Project 4.3\venv\lib\site-packages\django\test\utils.py", line 96, in instrumented_test_render
    return self.nodelist.render(context)
  File "C:\Users\Ahmed\Desktop\Project 4.3\venv\lib\site-packages\django\template\base.py", line 937, in render
    bit = node.render_annotated(context)
  File "C:\Users\Ahmed\Desktop\Project 4.3\venv\lib\site-packages\django\template\base.py", line 904, in render_annotated
    return self.render(context)
  File "C:\Users\Ahmed\Desktop\Project 4.3\venv\lib\site-packages\django\template\loader_tags.py", line 150, in render
    return compiled_parent._render(context)
  File "C:\Users\Ahmed\Desktop\Project 4.3\venv\lib\site-packages\django\test\utils.py", line 96, in instrumented_test_render
    return self.nodelist.render(context)
  File "C:\Users\Ahmed\Desktop\Project 4.3\venv\lib\site-packages\django\template\base.py", line 937, in render
    bit = node.render_annotated(context)
  File "C:\Users\Ahmed\Desktop\Project 4.3\venv\lib\site-packages\django\template\base.py", line 904, in render_annotated
    return self.render(context)
  File "C:\Users\Ahmed\Desktop\Project 4.3\venv\lib\site-packages\django\template\loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "C:\Users\Ahmed\Desktop\Project 4.3\venv\lib\site-packages\django\template\base.py", line 937, in render
    bit = node.render_annotated(context)
  File "C:\Users\Ahmed\Desktop\Project 4.3\venv\lib\site-packages\django\template\base.py", line 904, in render_annotated
    return self.render(context)
  File "C:\Users\Ahmed\Desktop\Project 4.3\venv\lib\site-packages\django\template\defaulttags.py", line 309, in render
    return nodelist.render(context)
  File "C:\Users\Ahmed\Desktop\Project 4.3\venv\lib\site-packages\django\template\base.py", line 937, in render
    bit = node.render_annotated(context)
  File "C:\Users\Ahmed\Desktop\Project 4.3\venv\lib\site-packages\django\template\base.py", line 904, in render_annotated
    return self.render(context)
  File "C:\Users\Ahmed\Desktop\Project 4.3\venv\lib\site-packages\django\template\defaulttags.py", line 209, in render
    nodelist.append(node.render_annotated(context))
  File "C:\Users\Ahmed\Desktop\Project 4.3\venv\lib\site-packages\django\template\base.py", line 904, in render_annotated
    return self.render(context)
  File "C:\Users\Ahmed\Desktop\Project 4.3\venv\lib\site-packages\django\template\base.py", line 987, in render
    output = self.filter_expression.resolve(context)
  File "C:\Users\Ahmed\Desktop\Project 4.3\venv\lib\site-packages\django\template\base.py", line 671, in resolve
    obj = self.var.resolve(context)
  File "C:\Users\Ahmed\Desktop\Project 4.3\venv\lib\site-packages\django\template\base.py", line 796, in resolve
    value = self._resolve_lookup(context)
  File "C:\Users\Ahmed\Desktop\Project 4.3\venv\lib\site-packages\django\template\base.py", line 837, in _resolve_lookup
    current = getattr(current, bit)
  File "C:\Users\Ahmed\Desktop\Project 4.3\core\models.py", line 79, in count_sold
    return self.OrderItem.quantity_set.filter(ordered=True).count()
AttributeError: 'Item' object has no attribute 'OrderItem'
[03/Jul/2020 19:40:51] "GET /usersheet/Ahesham HTTP/1.1" 500 207341

Tags: djangoinpyprojectvenvlibpackagesline
1条回答
网友
1楼 · 发布于 2024-04-26 01:11:24

您需要做的是汇总所有orderitems的数量。 像这样的方法应该会奏效:

from django.db.models import Sum
return self.orderitem_set.filter(ordered=True).aggregate(total=Sum('quantity'))['total']

相关问题 更多 >