问题描述
我想做一个像原始 sql select count(b.status) from a left out join b on a.id = b.user_id group_by(b.status)
这样的查询。我知道如何使用原始 sql 获得我想要的东西。但是当我尝试使用 orm 实现它时,它失败了。代码如下:
query_kwargs_dict = {'id__in': [10000,10001]}
statistics = UserAuthModel.objects.filter(**query_kwargs_dict).select_related(
'obbyuserinfomodel'
).values('obbyuserinfomodel__status').annotate(count=Count('obbyuserinfomodel__status')).query
print('statistics',statistics)
打印语句输出为:
statistics SELECT `users_obby_info`.`status`,COUNT(`users_obby_info`.`status`) AS `count` FROM `users_auth` LEFT OUTER JOIN `users_obby_info` ON (`users_auth`.`id` = `users_obby_info`.`user_id`) WHERE `users_auth`.`id` IN (10000,10001) GROUP BY `users_auth`.`id`,`users_obby_info`.`status` ORDER BY `users_auth`.`id` DESC
让我困惑的是 group_by
。它应按 values
中指定的字段分组。在我的例子中,它是 obbyuserinfomodel__status
,但输出 sql 语句显示它被 users_auth
.id
和 users_obby_info
.status
分组在一起。我想要的只是users_obby_info
。status
。
下面是两个表格(为了简单起见,我省略了一些字段):
class UserAuthModel(AbstractBaseUser):
...
class ObbyUserInfoModel(models.Model):
user = models.OnetoOneField(UserAuthModel,on_delete=models.CASCADE)
...
status = models.CharField(max_length=15,default=ACCOUNTSTATUS.UNACTIVATED.value,null=True)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)