簡體   English   中英

django如何使用外鍵注釋

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM