Django中带过滤条件统计反向多对多字段计数的问题
解决指定封禁模式下的用户被操作次数统计问题
问题原因
你的查询失效是因为反向关联Action时用错了关联名称。Action模型里user_list字段的related_name设为了"user_list",所以从CustomUser反向关联Action记录时,必须用这个指定的名称,而非默认的action。
正确查询代码
修正过滤条件中的关联路径即可实现需求:
CustomUser.objects.annotate( banned_by_count=Count( 'user_list', distinct=False, filter=Q(user_list__ban_mode__ban_mode="BAN") ) )
关键说明
user_list是CustomUser反向关联Action的唯一合法名称,通过它能关联到所有包含当前用户的封禁操作记录。distinct=False保证同一发起者的多次操作都会被统计,满足你"操作发起者不做去重"的要求。- 过滤条件精准匹配
ban_mode为"BAN"的操作,只统计这类场景下的操作次数。
内容的提问来源于stack exchange,提问作者h_enes_simsek
相关产品推荐
相关产品推荐

