您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在Django查询中使用.extra(select = {…})引入的值上使用.aggregate()?

在Django查询中使用.extra(select = {…})引入的值上使用.aggregate()?

你可以使用自定义聚合函数生成查询

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的好方法?

Go 2022/1/1 18:23:20 有392人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶