使用Django获取每月的总数

Ern*_*ieP 5 django django-models django-queryset

我有这样的模型:

class Sales(models.Model):
    item = models.CharField(max_length=40)
    date_sold = models.DateTimeField()
Run Code Online (Sandbox Code Playgroud)

我想提供一个特定年份每个月销售总项目的条形图.我的图表软件需要一个如下所示的列表,其中每个数字是特定月份的总销售数量.

sales_by_month = [4, 6, 7, 3, 5. ...]  
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

我有一种感觉,我应该使用日期aggregate和/或annotate,但不能解决它.

我正在使用SQLite,但计划去PostgreSQL.

我在另一个使用ruby on rails的项目中做到了这一点,据我记忆,它非常简单,所以我希望Django有一个很好的解决方案.

sol*_*tic 6

通常对于这样的事情,下面的代码应该有用.

Sales.objects.filter(date_sold__year='2010').values_list('month').annotate(total_item=Count('item'))
Run Code Online (Sandbox Code Playgroud)

但是你有一个dateTime字段,而不仅仅是每个项目的月份.您可以尝试执行以下操作,但我怀疑它是否有效.

values_list('date_sold__month')
Run Code Online (Sandbox Code Playgroud)

另一种选择是尝试使用此线程中所示的extra().因此,如果您使用MySql,可以尝试这样的方法.

Sales.objects.filter(date_sold__year='2010').extra({'month' : "MONTH(date_sold)"}).values_list('month').annotate(total_item=Count('item'))
Run Code Online (Sandbox Code Playgroud)