簡體   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