【发布时间】:2011-06-01 20:07:57
【问题描述】:
我正在尝试计算玩家每周玩的次数,如下所示:
player.game_objects.extra(
select={'week': 'WEEK(`games_game`.`date`)'}
).aggregate(count=Count('week'))
但 Django 抱怨
FieldError: Cannot resolve keyword 'week' into field. Choices are: <lists model fields>
我可以像这样在原始 SQL 中做到这一点
SELECT WEEK(date) as week, COUNT(WEEK(date)) as count FROM games_game
WHERE player_id = 3
GROUP BY week
有没有在 Django 中不执行原始 SQL 的好方法?
【问题讨论】:
-
你应该展示你的模型,也许。 QS 是否在没有聚合的情况下工作?
-
是的,
player.game_objects.extra(select={'week': 'WEEK(games_game.date)'})[0].week按预期提供了43L。 -
我的模型相当复杂,这是我的问题的简化。如果有帮助,我可以用简单的模型编写一个测试用例。
-
我对答案有几个想法,但它是否有用,以及具体实施它的适当方式取决于您的模型和/或数据库结构的一些细节尝试推断似乎很愚蠢,因为您可以提供它们实际上是什么(同上,Trey)。您能否发布它们(首选)或它们的省略/简化版本,以便我可以尝试一下?
-
我刚刚发布了一个答案,其中包含一个示例场景,其中这是一个问题,以及一个比使用原始 SQL 更好但仍然不理想的变通解决方案。
标签: python mysql django django-queryset django-aggregation