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