微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Django中使用注释获取对象不同字段的总和?

如何解决如何在Django中使用注释获取对象不同字段的总和?

我有三个这样的模型:

class Corredor (models.Model):
    dorsal=models.IntegerField(primary_key=True)
    tipo=models.CharField(max_length=50)
    nombre=models.CharField(max_length=50)
    f_nacimiento=models.DateField(default=1/1/1975)
    nacimiento=models.IntegerField()
    categoria=models.CharField(max_length=50)
    pais=models.CharField(max_length=50)
    equipo=models.CharField(max_length=50)
    nombre_equipo=models.CharField(max_length=50)
    lid=models.BooleanField()
    gre=models.BooleanField()
    jor=models.BooleanField()
    giro=models.BooleanField()
    tour=models.BooleanField()
    vuelta=models.BooleanField()
    abandono_giro=models.IntegerField(default=0)
    etapa_aban_giro=models.IntegerField(default=0)
    abandono_tour=models.IntegerField(default=0)
    etapa_aban_tour=models.IntegerField(default=0)
    abandono_vuelta=models.IntegerField(default=0)
    etapa_aban_vuelta=models.IntegerField(default=0)

    class Meta:
        ordering=['nombre']

    def __str__(self):
        return self.nombre

class Equipo (models.Model):
    alias=models.CharField(max_length=50,primary_key=True)
    lid1=models.ForeignKey(Corredor,limit_choices_to={'lid':True,'giro':True,'tipo': "Rider"},related_name="lid1",on_delete=models.CASCADE)
    lid2=models.ForeignKey(Corredor,related_name="lid2",on_delete=models.CASCADE)
    lid3=models.ForeignKey(Corredor,related_name="lid3",on_delete=models.CASCADE)
    lid4=models.ForeignKey(Corredor,related_name="lid4",on_delete=models.CASCADE)
    gre1=models.ForeignKey(Corredor,limit_choices_to={'gre':True,related_name="gre1",on_delete=models.CASCADE)
    gre2=models.ForeignKey(Corredor,related_name="gre2",on_delete=models.CASCADE)
    gre3=models.ForeignKey(Corredor,related_name="gre3",on_delete=models.CASCADE)
    jlg1=models.ForeignKey(Corredor,limit_choices_to={'jor':True,related_name="jlg1",on_delete=models.CASCADE)
    jlg2=models.ForeignKey(Corredor,related_name="jlg2",on_delete=models.CASCADE)
    lid_sup=models.ForeignKey(Corredor,related_name="lid_sup",on_delete=models.CASCADE)
    gre_sup=models.ForeignKey(Corredor,related_name="gre_sup",on_delete=models.CASCADE)
    jlg_sup=models.ForeignKey(Corredor,related_name="jlg_sup",on_delete=models.CASCADE)
    ganador_e1=models.ForeignKey(Corredor,limit_choices_to={'giro':True,related_name="ganador_e1",on_delete=models.CASCADE)
    ganador_e2=models.ForeignKey(Corredor,related_name="ganador_e2",on_delete=models.CASCADE)
    ganador_e3=models.ForeignKey(Corredor,related_name="ganador_e3",on_delete=models.CASCADE)
    ganador_e4=models.ForeignKey(Corredor,related_name="ganador_e4",on_delete=models.CASCADE)
    ganador_e5=models.ForeignKey(Corredor,related_name="ganador_e5",on_delete=models.CASCADE)
    ganador_e6=models.ForeignKey(Corredor,related_name="ganador_e6",on_delete=models.CASCADE)
    ganador_e7=models.ForeignKey(Corredor,related_name="ganador_e7",on_delete=models.CASCADE)
    ganador_e8=models.ForeignKey(Corredor,related_name="ganador_e8",on_delete=models.CASCADE)
    ganador_e9=models.ForeignKey(Corredor,related_name="ganador_e9",on_delete=models.CASCADE)
    ganador_e10=models.ForeignKey(Corredor,related_name="ganador_e10",on_delete=models.CASCADE)
    ganador_e11=models.ForeignKey(Corredor,related_name="ganador_e11",on_delete=models.CASCADE)
    ganador_e12=models.ForeignKey(Corredor,related_name="ganador_e12",on_delete=models.CASCADE)
    ganador_e13=models.ForeignKey(Corredor,related_name="ganador_e13",on_delete=models.CASCADE)
    ganador_e14=models.ForeignKey(Corredor,related_name="ganador_e14",on_delete=models.CASCADE)
    ganador_e15=models.ForeignKey(Corredor,related_name="ganador_e15",on_delete=models.CASCADE)
    ganador_e16=models.ForeignKey(Corredor,related_name="ganador_e16",on_delete=models.CASCADE)
    ganador_e17=models.ForeignKey(Corredor,related_name="ganador_e17",on_delete=models.CASCADE)
    ganador_e18=models.ForeignKey(Corredor,related_name="ganador_e18",on_delete=models.CASCADE)
    ganador_e19=models.ForeignKey(Corredor,related_name="ganador_e19",on_delete=models.CASCADE)
    ganador_e20=models.ForeignKey(Corredor,related_name="ganador_e20",on_delete=models.CASCADE)
    ganador_e21=models.ForeignKey(Corredor,related_name="ganador_e21",on_delete=models.CASCADE)
    ganador_tour=models.ForeignKey(Corredor,related_name="maillot_amarillo",on_delete=models.CASCADE)
    segundo_tour=models.ForeignKey(Corredor,related_name="segundo",on_delete=models.CASCADE)
    tercero_tour=models.ForeignKey(Corredor,related_name="tercero",on_delete=models.CASCADE)
    cuarto_tour=models.ForeignKey(Corredor,related_name="cuarto",on_delete=models.CASCADE)
    quinto_tour=models.ForeignKey(Corredor,related_name="quinto",on_delete=models.CASCADE)
    sexto_tour=models.ForeignKey(Corredor,related_name="sexto",on_delete=models.CASCADE)
    mv=models.ForeignKey(Corredor,related_name="maillot_verde",on_delete=models.CASCADE)
    mpr=models.ForeignKey(Corredor,related_name="maillot_puntos_rojos",on_delete=models.CASCADE)
    mb=models.ForeignKey(Corredor,'nacimiento__gte': 1996},related_name="maillot_blanco",on_delete=models.CASCADE)
    sc=models.ForeignKey(Corredor,related_name="supercombativo",on_delete=models.CASCADE)
    me=models.ForeignKey(Corredor,'tipo': "Team"},related_name="mejor_equipo",on_delete=models.CASCADE)
    owner=models.ForeignKey(User,on_delete=models.CASCADE)
    created=models.DateTimeField(auto_Now_add=True)

    def __str__(self):
        return self.alias


class Puntuacion (models.Model):
    competicion=models.CharField(max_length=50)
    temporada=models.IntegerField()
    etapa=models.IntegerField()
    modalidad=models.CharField(max_length=50)
    dorsal=models.ForeignKey(Corredor,blank=True,null=True,related_name="puntos",on_delete=models.CASCADE)
    categoria=models.CharField(max_length=50)
    descripcion=models.CharField(max_length=150)
    puntos=models.IntegerField()

    def __str__(self):
        return self.categoria

在 Puntuacion 中,背侧可以有不同类别的 puntos,也可能没有任何 puntos。 目标是,在 Equipo 模型中,对于每个 Alias,都有不同领域(lid1、lid2、lid2、........gre1、gre2、. ....).

我是 Django 新手,我认为使用 annotate 是一种选择,但我不知道如何进行查询

感谢任何能帮助我的人。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。