问题描述
理想情况下,我想使用 Count 聚合器来计算两个字段的不同外观,而不仅仅是一个:
q = Tag.objects.annotate(success=Count(['artifact__event__session','artifact'],distinct=True))
但这似乎是不允许的。 我想出了将要计算以下不同组合的字段连接起来的hacky 解决方案:
q = Tag.objects.annotate(success=Count(Concat('artifact__event__session','artifact'),distinct=True))
但这似乎不是正确的做法。 有没有更好的办法?
更多背景信息:
实际查询更像是:
q = Tag.objects.annotate(success=Count(Concat('artifact__event__session',filter=Q(artifact__event__success=True,artifact__event__user=user),distinct=True))
含义:
“对于每个标签,给我用该标签标记的工件和包含该工件的会话的不同会话-工件组合的数量,其中属于该用户的事件是成功的”
模型为:
class Artifact(models.Model):
tags = models.ManyToManyField(Tag)
...
class Event(models.Model):
artifact = ForeignKey(Artifact)
session = ForeignKey(Session)
success = BooleanField()
user = ForeignKey(User)
...
class Session(models.Model):
...
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)