I need to aggregate data from an Order table to be able to determine the total amount of items sold per date .
My order model looks like this:
class Order(models.Model):
guest = models.ForeignKey('hotel.Guest', on_delete=models.CASCADE)
date = models.DateField(auto_now_add=True)
amount = models.IntegerField()
item = models.ForeignKey('hotel.Item', on_delete=models.CASCADE)
price = models.IntegerField(default=1)
is_paid = models.BooleanField(default=False)
paid_date = models.DateField(blank=True, null=True)
I have now created a view that iterates over time and date:
def listAllOrders(request):
context = {}
orders = Order.objects.exclude(item__name = 'Room Rate')
item_dates = orders.values('date')
item_date = item_dates.order_by('date').distinct('date')
item_ids = orders.values('item__name')
item_id = item_ids.order_by('item__name').distinct('item__name')
inventory = []
for d in item_date:
for i in item_id:
q=Order.objects.filter(item__name=i['item__name'], date=d['date'])
ta=q.aggregate(total_amount = Sum('amount'))
tp=q.aggregate(total_price = Sum('price'))
inventory.append([d['date'],i['item__name'],ta,tp])
context['inventory'] = inventory
#context = Order.objects.all()
return render (request, 'hotel/inventory.html', context)
how can I now fill this data in a table in my template. If I give a queryset to context I usually do this like this:
<table class="table table-condensed table_orders">
<tr>
<th>Date</th>
<th>Amount</th>
<th>Item</th>
</tr>
{% for Order in inventory %}
<tr>
<td>{{ Order.date }}</td>
<td>{{ Order.amount }}</td>
<td>{{ Order.item }}</td>
</tr>
{% endfor %}
</table>
This obviously doesn't work here because the data in inventory is not structured.. how can I solve this?