WEEK_FUNC = 'STRFTIME("%%%%W", %s)' # use 'WEEK(%s)' for MysqL class WeekCountAggregate(models.sql.aggregates.Aggregate): is_ordinal = True sql_function = 'WEEK' # unused sql_template = "COUNT(%s)" % (WEEK_FUNC.replace('%%', '%%%%') % '%(field)s') class WeekCount(models.aggregates.Aggregate): name = 'Week' def add_to_query(self, query, alias, col, source, is_summary): query.aggregates[alias] = WeekCountAggregate(col, source=source, is_summary=is_summary, **self.extra) >>> game_objects.extra(select={'week': WEEK_FUNC % '"games_game"."date"'}).values('week').annotate(count=WeekCount('pk'))
@H_419_5@解决方法
我正在尝试这样计算一个球员每周玩的次数:
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的好方法?
player.game_objects.extra(
select={'week': 'WEEK(`games_game`.`date`)'}
).aggregate(count=Count('week'))
FieldError: Cannot resolve keyword 'week' into field. Choices are: <lists model fields>
SELECT WEEK(date) as week,COUNT(WEEK(date)) as count FROM games_game
WHERE player_id = 3
GROUP BY week
我正在尝试这样计算一个球员每周玩的次数:
但是Django抱怨
我可以这样在原始SQL中完成
有没有在Django中不执行原始SQL的好方法?