修改列表视图查询集以汇总包含具有相同值的列的表

问题描述 投票:0回答:1

我有2个模型;一种用于物料定义,另一种用于库存跟踪。我需要一个库存表,因为相同的物料将具有不同的有效期。我正在使用django通用listview,并且想要修改queryset以显示物料数量的摘要列表将被汇总。

示例:

stocks_table:

name    packing_details    expiry_date    quantity
milk    1lt boxes          11/11/2019     30
milk    1lt boxes          12/12/2019     40

after modifiying the queryset :

name    packing_details    quantity
milk    1lt boxes          70

通用列表视图是否可能,或者我应该准备基于函数的视图吗?

模型

class Material(models.Model):

    name = models.CharField(max_length=500)
    packing_details = models.CharField(max_length=500)
    material_unit = models.CharField(max_length=3)
class Stock(models.Model):
    material = models.ForeignKey(Material, on_delete=models.CASCADE)
    expiry_date = models.DateField()
    quantity = models.DecimalField(max_digits=10, decimal_places=2)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    date_created = models.DateField(default=timezone.now)
    created_by = models.ForeignKey(User, on_delete=models.CASCADE, default=1)

查看

class StocksListView(LoginRequiredMixin, ListView):
    model = Stock
    context_object_name = 'stocks'

模板

            {% for stock in stocks %}
                <tr>
                    <td class="text-center">{{ stock.material.name }}</td>
                    <td class="text-center">{{ stock.material.packing_details }}</td>
                    <td class="text-center">{{ stock.quantity }}</td>
                    <td class="text-center">{{ stock.price }}</td>
                </tr>
            {% endfor %}
django django-queryset django-generic-views
1个回答
0
投票

无论执行此操作,实际上都需要翻转查询;您需要获取物料的清单,并汇总其库存量。

SO:

from django.db.models import Sum

Material.objects.annotate(quantity=Sum('stock__quantity')).filter(quantity__gt=0)

您可以将其直接设置为视图中的查询集:

class StocksListView(LoginRequiredMixin, ListView):
    queryset = Material.objects.annotate...

现在,从材料而不是库存开始,您需要更新模板。

© www.soinside.com 2019 - 2024. All rights reserved.