0

Here is my model Model:

class Order(models.Model):
    buyer = models.ForeignKey(Buyer, on_delete=models.CASCADE)
    value = models.FloatField(null=True, blank=True)
    date = models.DateField(null=True, blank=True)

I need a query to show weekly data with the start date of the week and the end date of the week.

db value:

{'id': 1, 'buyer': 1, 'value': 5000.0, 'date': '01-01-2022'}
{'id': 1, 'buyer': 1, 'value': 1000.0, 'date': '03-01-2022'}
{'id': 1, 'buyer': 1, 'value': 1000.0, 'date': '05-01-2022'}
{'id': 1, 'buyer': 1, 'value': 2000.0, 'date': '07-01-2022'}
{'id': 1, 'buyer': 1, 'value': 4000.0, 'date': '08-01-2022'}
{'id': 1, 'buyer': 1, 'value': 1000.0, 'date': '09-01-2022'}

expected table:

---------------------------------------------
|  week | start date | end date   |  Value  |
---------------------------------------------
|   1   | 01-01-2022 | 07-01-2022 |  9000   |
---------------------------------------------
|   2   | 08-01-2022 | 14-01-2022 |  5000   |
---------------------------------------------

1 Answers1

0

You can use filters with __gte to use as an operator >=.

week_orders = Order.objects.filter(date__gte=START_DATE, date__lte=END_DATE)

Then you have a QuerySet that you can operate further.

from django.db.models import Sum

sum_of_values = week_orders.aggregate(Sum('value'))
NixonSparrow
  • 6,130
  • 1
  • 6
  • 18