[英]how to use django annotate with foreign key
考慮簡單的Django模型
class Journey(models.Model):
vrn=models.CharField(max_length=200) # Vehicle Reg No
kilo=models.FloatField()
class J_user(models.Model):
jdi=models.ForeignKey(Journey, related_name="Journey_User",on_delete = models.DO_NOTHING,)
uid=models.IntegerField()
很容易在單個表中進行注釋,例如,如果我們想要每輛車的總行駛公里數(vrn代表車輛的注冊號)
Journey.objects.values('vrn').annotate(Total_kilo=Sum('kilo'))
現在,我想進行一個查詢,該查詢將返回每個用戶在每輛汽車中行駛了多少公里。
讓旅程數據表
J_user表的數據
那么結果應該是
謝謝你的幫助。
這是您的查詢:
Journey
.objects
.order_by() #<-- important to avoid include sort fields
.values('vrn', 'j_user__uid', )
.annotate(Total_kilo=Sum('kilo'))
values
字段將包含在聚合子句中。 樣品:
print(
Material
.objects
.values( "uf_id", "uf__mp__id", )
.annotate( Sum("total_social_per_c") )
.query )
結果:
SELECT "material_material"."uf_id",
"ufs_uf"."mp_id",
Sum("material_material"."total_social_per_c") AS
"total_social_per_c__sum"
FROM "material_material"
INNER JOIN "ufs_uf"
ON ( "material_material"."uf_id" = "ufs_uf"."id" )
GROUP BY "material_material"."uf_id",
"ufs_uf"."mp_id"
根據您的模型,它應該是:
J_user.objects.values('uid', vrn=F('jdi__vrn')).annotate(kilo=Sum('jdi__kilo'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.