Django ORM, group by day

后端 未结 5 1016
再見小時候
再見小時候 2020-12-09 07:47

I am trying to group products by DAY, however date_created is a datetime field.

Product.objects.values(\'date_created\') \\
               .annotate(availabl         


        
相关标签:
5条回答
  • 2020-12-09 08:23

    Try:

    Product.objects.values('date_created__date').annotate(available=Count('available_quantity'))
    

    hope helps.

    0 讨论(0)
  • 2020-12-09 08:25

    In Django 1.4, you could use .dates('date_created', 'day') instead of .values().

    Try this code snippet:

    Product.objects.annotate(available=Count('available_quantity')) \
      .dates('date_created', 'day')
    

    This should return:

    [
        {'date_created': datetime.datetime(2012, 4, 14), 'available': 2}, ...
    ]
    
    0 讨论(0)
  • 2020-12-09 08:30

    Similar approach from San4ez's answer, but returning dates as 'YYYY-MM-DD' instead of 'datetime.datetime(YYYY, MM, DD)':

    Product.objects.extra(select={'day': "TO_CHAR(date_created, 'YYYY-MM-DD')"})
                   .values('day') \
                   .order_by('day') \
                   .annotate(available=Count('date_created'))
    
    0 讨论(0)
  • 2020-12-09 08:35

    You can try

    Product.objects.extra(select={'day': "TO_CHAR(date_created, 'YYYY-MM-DD')"})\
                    .values('day')\
                    .order_by('day')\
                    .annotate(bets=Count('date_created'))
    
    0 讨论(0)
  • 2020-12-09 08:42

    Inspired by this question try this for MySQL

    from django.db.models import Count
    
    Product.objects.extra(select={'day': 'date( date_created )'}).values('day') \
                   .annotate(available=Count('date_created'))
    
    0 讨论(0)
提交回复
热议问题