如何将相等的数据分组并在模板中显示

Posted

技术标签:

【中文标题】如何将相等的数据分组并在模板中显示【英文标题】:how to group equal data and show it in the template 【发布时间】:2021-12-29 22:04:40 【问题描述】:

我有一个显示在餐厅订购产品历史的应用程序,为了获取餐厅的数据,我有以下视图:

def restaurant_orders(request):

    restaurant = get_restaurant(request.user.restaurant.user_id)
    
    products = list(restaurant.restaurante.values_list("id"))

    items = Item.objects.filter(product_id__in=products).order_by('order_id')

    context = 'items': items

    return render(request, 'pages/orders_restaurant.html', context)

在模板中我显示如下:

<div class="col-lg-7">
    <h2>Histórico de Pedidos</h2>
    % for value in items %
        <ul class="list-group list-group-flush"></ul>    
        <li class="list-group-item bg-light">
        <h4>Order  value.order_id </h4>
         value.quantity  X  value.product 
        <span class="float-right">R$  value.price </span>
            <li class="font-weight-bold list-group-item bg-light">Client Name
                <span class="float-right"> value.order.name </span>
            </li>
        </li>
             <br> 
    % endfor %
</div>

但是这样做我将每个数据分开,我想知道是否有任何方法可以对具有相同值的字段的数据进行分组。我现在得到的结果是this,我想要类似this。

model.py

class Item(models.Model):
    order = models.ForeignKey(Order, related_name="items", on_delete=models.CASCADE)
    product = models.ForeignKey(Product, related_name="order_items", on_delete=models.CASCADE)
    price = models.DecimalField(max_digits=5, decimal_places=2)
    quantity = models.PositiveIntegerField(
        validators= [
            MinValueValidator(1),
            MaxValueValidator(20),
        ]
    )

【问题讨论】:

【参考方案1】:

您需要遍历 Order 模型查询。 您可以通过Item 模型中的相关名称属性对其进行过滤。


orders = Order.objects.filter(items__product_id__in=products)

然后,在您的模板中,您可以遍历订单和每个订单中的项目:

<ul> # apply your markup... #
  % for order in orders %
    <li>
       order 
      <ul>
        % for item in order.items.all %
          <li> item.product  # ... #
        % endfor %
      </ul>
    </li>
  % endfor %
</ul>

【讨论】:

完美运行,我已经尝试通过Order模型进行过滤,但我不知道如何使用相关名称,ty

以上是关于如何将相等的数据分组并在模板中显示的主要内容,如果未能解决你的问题,请参考以下文章

Django - 分组数据并在模板中显示外键的名称

将查询分组为 3 列,并在 Apex Oracle 中显示另一列的总和

第十三章 分组数据

如何按键分组并在单行的其他列中返回最小值/最大值?

将DataTable中数据进行分组,不写SQL

分组依据并在日期下显示条目