问题描述
我需要一些帮助来在我的三个模型中进行查询。第一个是Cyclist,有编号(pk)、姓名、生日等字段。第二个模型是带有id(pk)、分类类型、阶段编号、编号(外键)和分数的分类。我需要做的第一个查询是为每个骑自行车的人获取每个阶段编号的总分。
我的选择是:
puntos=Corredor.objects.values('dorsal','etapa').aggregate(total_puntos=Sum('puntos')
在那之后,我有另一个团队模型。团队是由客户选择的一组自行车手。我想为每个团队获得组成该团队的自行车手的总积分,但在这种情况下,我不知道如何在新查询中使用查询 puntos 进行注释。也许:
team_points=Equipo.objects.annotate(F(Sum(lid__dorsal__puntos))+(Sum(lid2__dorsal__puntos))+...........)))
预先感谢您的帮助。
这些是模型:
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
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)