[英]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.