[英]How to join groupby subquery with admin queryset in Django
我正在尝试对预先聚合的数据集进行分组,然后将数据与ModelAdmin合并。 因此,对于各种实体,我想显示类似于Google Analytics(分析)的汇总数据。
我有一个实体模型
class Link(AnalyticalObject):
name = models.CharField(max_length=60)
url = models.CharField(max_length=60)
slug = models.SlugField(unique=True)
description = models.TextField()
和汇总数据的模型
class LinkByDayAnalytic(models.Model):
project = models.ForeignKey(Project)
link = models.ForeignKey(Link)
day = models.DateField(db_index=True)
clicks = models.IntegerField()
emails = models.IntegerField()
purchases = models.IntegerField()
revenue = models.FloatField()
我正在尝试修改modeladmin上的queryset以进行分组,并将数据与项目(在这种情况下为链接)结合在一起。
def get_queryset(self, request):
qs = super(ProjectAdmin, self).get_queryset(request)
'''
Do analytics query
'''
qs.annotate(newcol=RawSQL("select lander_id, SUM(purchases) as purchases FROM manager_campaignbydayanalytic GROUP BY lander_id",[]))
print qs.query
#qs.
return qs
我已附上此屏幕截图以说明我想要的结果。 我似乎无法将自己的头围绕注释,附加和其他内容。
不幸的是,django中没有办法进行自定义分组依据。
但是幸运的是,对于所需的结果,您不需要任何自定义的结果。
首先,定义related_name
上link
在你的领域LinkByDayAnalytic
型号:
link = models.ForeignKey(Link, related_name="by_day_analytics")
现在准备查询:
qs.annotate(
purchases_analytic=Sum('by_day_analytics__purchases"),
clicks=Sum('by_day_analytics__clicks'),
emails=Sum('by_day_analytics__emails'),
email_pct=Sum('by_day_analytics__emails') / Sum('by_day_analytics__clicks') * 100,
# etc...
)
接下来-在自定义列中使用该计算值(它们不会自动出现在列表显示中)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.