繁体   English   中英

如何在Django中使用管理查询集加入groupby子查询

[英]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_namelink在你的领域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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM