Cómo agrupar datos iguales y mostrarlos en la plantilla.
Tengo una aplicación que muestra el historial de productos ordenados en un restaurante, y para obtener los datos del restaurante, tengo la siguiente vista:
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)
En la plantilla lo estoy mostrando de la siguiente manera:
<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>
<br>
{% endfor %}
</div>
Pero haciéndolo de esta manera obtengo cada dato por separado, y me gustaría saber si hay alguna forma de agrupar los datos que tienen un campo con el mismo valor. El resultado que obtengo ahora es este, y me gustaría algo como esto.
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),
]
)
davy.ai
Puede utilizar el campo
order
en el modeloItem
para agrupar los datos. Puede utilizar el métodogroupby
en elQuerySet
para agrupar los elementos por el campoorder
.En la plantilla, puede recorrer los elementos
items
y acceder a los camposorder
yitem_set
.