提问者:小点点

在电子商务Django项目中尝试获得每个项目的总销售额


我正试着弄到总的不是。 在付款后出售物品的。

当订单支付时,ordered=models.BooleanField(default=false)变为true

我已经尝试添加与销售总额的上下文,但它没有工作,所以我保留在下面的代码,但注释了它。

我还尝试添加一个带有总数的函数,但我一直得到“item”对象没有属性'order_set',我将其保留在下面以供参考

下面是项目models.py。

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

    def __str__(self):
        return self.title
    
    # def count_sold(self):
      #  return self.order_set.filter(ordered=True).count()

下面是OrderItemModels.py。

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

这是订单

class Order(models.Model):
    items = models.ManyToManyField(OrderItem)
    ordered = models.BooleanField(default=False)

这是views.py。

class DesignerOnlyPostListView(ListView):
    model = Item
    template_name = "designer_only_posts.html"
    context_object_name = 'items'
    paginate_by = 6

    def get_queryset(self):
        user = get_object_or_404(User, username=self.kwargs.get('username'))
        return Item.objects.filter(designer=user).order_by('-timestamp')

    def get_context_data(self, **kwargs):
        comments = Comment.objects.all()
        # total_sold = Order.objects.all()
        context = super().get_context_data(**kwargs)
        context["total_comments"] = comments.count()
        # context["total_sold"] = total_sold.count()
        return context

这是模板

{% for item in items %}
<tr>
    <td>No. of Sold:</td>
    <td>{{ item.total_sold.all.count }}</td>
</tr>
{% endfor %}

这是我试图使用count_seld函数时的模板

                                    <tr>-->
<!--                                        <td>No. of Reviews:</td>-->
<!--                                        <td>{{ item.count_sold  }}</td>-->
<!--                                    </tr>

共1个答案

匿名用户

Item没有order_set,因为这两个模型之间没有关系。

  • 项目与OrderItem
  • 相关
  • 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()

和模板

{% for item in items %}
    <tr>
        <td>No. of Sold:</td>
        <td>{{ item.total_sold }}</td>
    </tr>
{% endfor %}