用Django'注释注释;s ORM

用Django'注释注释;s ORM,django,django-queryset,Django,Django Queryset,我想找出一个月的平均分 所以我想要一天的平均分数。一个人一天可以完成一项以上的任务,所以我想要当天的平均分数 然后我要这个月的平均分 这是我希望django执行的原始sql: SELECT AVG(avg_score) as mon_avg, EXTRACT(year FROM c_date) as y, EXTRACT(month FROM c_date) as m FROM ( SELECT AVG(SCORE) AS avg_score, DATE(created) as c_d

我想找出一个月的平均分

所以我想要一天的平均分数。一个人一天可以完成一项以上的任务,所以我想要当天的平均分数

然后我要这个月的平均分

这是我希望django执行的原始sql:

SELECT AVG(avg_score) as mon_avg, EXTRACT(year FROM c_date) as y, 
EXTRACT(month FROM c_date) as m
FROM ( 
   SELECT AVG(SCORE) AS avg_score, DATE(created) as c_date
   FROM companies_task
   GROUP BY c_Date 
) as DAY_AVERAGE  GROUP BY y, m
ORDER BY y, m
我的模型如下所示:

Task(models.Model):
    score = models.IntegerField()
    completed = models.DateTimeFiled(auto_now=True)
我目前的尝试是:

Task.objects.filter(created=year_ago())\
    .extra(select={"date": "date(created)"})\
    .values('date')\
    .annotate(avg_score=Avg('score'))\
    .extra(select={
        'year': "EXTRACT(year FROM date)",
        'month': "EXTRACT(month from date)"
    })\
    .values('year', 'month')\
    .annotate(month_avg=Avg('avg_score'))
我得到的错误是:

FieldError: Cannot resolve keyword 'year' into field. Choices are: avg_score, created, date, employee, employee_id, id, modified, month, score, year


FieldError                                Traceback (most recent call last)
/usr/local/lib/python3.4/site-packages/django/db/models/sql/query.py in add_fields(self, field_names, allow_m2m)
   1631                 _, targets, _, joins, path = self.setup_joins(
-> 1632                     name.split(LOOKUP_SEP), opts, alias, allow_many=allow_m2m)
   1633                 targets, final_alias, joins = self.trim_joins(targets, joins, path)

/usr/local/lib/python3.4/site-packages/django/db/models/sql/query.py in setup_joins(self, names, opts, alias, can_reuse, allow_many)
   1404         path, final_field, targets, rest = self.names_to_path(
-> 1405             names, opts, allow_many, fail_on_missing=True)
   1406 

/usr/local/lib/python3.4/site-packages/django/db/models/sql/query.py in names_to_path(self, names, opts, allow_many, fail_on_missing)
   1329                     raise FieldError("Cannot resolve keyword %r into field. "
-> 1330                                      "Choices are: %s" % (name, ", ".join(available)))
   1331                 break

FieldError: Cannot resolve keyword 'year' into field. Choices are: created, employee, employee_id, id, modified, score

During handling of the above exception, another exception occurred:

FieldError                                Traceback (most recent call last)
<ipython-input-12-d207d6f92a38> in <module>()
      3             'month': "EXTRACT(month from date)"
      4         })\
----> 5         .values('year', 'month')\
      6         .annotate(avg__somehthing=Avg('avg_score'))

/usr/local/lib/python3.4/site-packages/django/db/models/query.py in values(self, *fields)
    710 
    711     def values(self, *fields):
--> 712         clone = self._values(*fields)
    713         clone._iterable_class = ValuesIterable
    714         return clone

/usr/local/lib/python3.4/site-packages/django/db/models/query.py in _values(self, *fields)
    705 
    706         query.values_select = field_names
--> 707         query.add_fields(field_names, True)
    708 
    709         return clone

/usr/local/lib/python3.4/site-packages/django/db/models/sql/query.py in add_fields(self, field_names, allow_m2m)
   1645                                + list(self.annotation_select))
   1646                 raise FieldError("Cannot resolve keyword %r into field. "
-> 1647                                  "Choices are: %s" % (name, ", ".join(names)))
   1648 
   1649     def add_ordering(self, *ordering):

FieldError: Cannot resolve keyword 'year' into field. Choices are: created, date, employee, employee_id, id, modified, month, score, year
FieldError:无法将关键字“year”解析为字段。选项包括:平均分数、创建、日期、员工、员工id、id、修改、月份、分数、年份
FieldError回溯(最近一次呼叫上次)
/添加字段中的usr/local/lib/python3.4/site-packages/django/db/models/sql/query.py(self、字段名称、allow\m2m)
1631,目标,连接,路径=self.setup\u连接(
->1632 name.split(LOOKUP\u SEP)、opts、alias、allow\u many=allow\u m2m)
1633目标,最终别名,连接=self.trim\u连接(目标,连接,路径)
/设置联接中的usr/local/lib/python3.4/site-packages/django/db/models/sql/query.py(self、names、opts、alias、can\u重用、allow\u many)
1404路径,最终_字段,目标,rest=self.names_到_路径(
->1405个名称、选项、允许\u多个、失败\u在\u缺失=真)
1406
/名称到路径中的usr/local/lib/python3.4/site-packages/django/db/models/sql/query.py(self、names、opts、allow\u many、fail\u on\u missing)
1329 raise FIELDRERROR(“无法将关键字%r解析为字段。”
->1330“选项为:%s”%(名称,,”。加入(可用)))
1331休息
FieldError:无法将关键字“year”解析为字段。选项包括:创建、员工、员工id、id、修改、分数
在处理上述异常期间,发生了另一个异常:
FieldError回溯(最近一次呼叫上次)
在()
3“月份”:“摘录(从日期算起的月份)”
4         })\
---->5.价值(年、月)\
6.注释(平均分数=平均分数(‘平均分数’))
/值中的usr/local/lib/python3.4/site-packages/django/db/models/query.py(self,*字段)
710
711 def值(自身,*字段):
-->712克隆=自身值(*字段)
713克隆。_iterable_class=ValuesIterable
714返回克隆
/usr/local/lib/python3.4/site-packages/django/db/models/query.py in_值(self,*字段)
705
706 query.values\u select=字段\u名称
-->707查询。添加字段(字段名称,True)
708
709返回克隆
/添加字段中的usr/local/lib/python3.4/site-packages/django/db/models/sql/query.py(self、字段名称、allow\m2m)
1645+列表(自注释_选择))
1646 raise FIELDRERROR(“无法将关键字%r解析为字段。”
->1647“选项为:%s”%(名称,,”。加入(名称)))
1648
1649 def添加_订购(自,*订购):
FieldError:无法将关键字“year”解析为字段。选项包括:创建、日期、员工、员工id、id、修改、月份、分数、年份

您能显示完整的错误堆栈跟踪吗?使用回溯更新了它。