I've got three models like this:
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,limit_choices_to={'lid':True, 'giro':True, 'tipo': "Rider"}, related_name="lid2", on_delete=models.CASCADE)
lid3=models.ForeignKey(Corredor,limit_choices_to={'lid':True, 'giro':True, 'tipo': "Rider"}, related_name="lid3", on_delete=models.CASCADE)
lid4=models.ForeignKey(Corredor,limit_choices_to={'lid':True, 'giro':True, 'tipo': "Rider"}, related_name="lid4", on_delete=models.CASCADE)
gre1=models.ForeignKey(Corredor,limit_choices_to={'gre':True, 'giro':True, 'tipo': "Rider"}, related_name="gre1", on_delete=models.CASCADE)
gre2=models.ForeignKey(Corredor,limit_choices_to={'gre':True, 'giro':True, 'tipo': "Rider"}, related_name="gre2", on_delete=models.CASCADE)
gre3=models.ForeignKey(Corredor,limit_choices_to={'gre':True, 'giro':True, 'tipo': "Rider"}, related_name="gre3", on_delete=models.CASCADE)
jlg1=models.ForeignKey(Corredor,limit_choices_to={'jor':True, 'giro':True, 'tipo': "Rider"}, related_name="jlg1", on_delete=models.CASCADE)
jlg2=models.ForeignKey(Corredor,limit_choices_to={'jor':True, 'giro':True, 'tipo': "Rider"}, related_name="jlg2", on_delete=models.CASCADE)
lid_sup=models.ForeignKey(Corredor,limit_choices_to={'lid':True, 'giro':True, 'tipo': "Rider"}, related_name="lid_sup", on_delete=models.CASCADE)
gre_sup=models.ForeignKey(Corredor,limit_choices_to={'gre':True, 'giro':True, 'tipo': "Rider"}, related_name="gre_sup", on_delete=models.CASCADE)
jlg_sup=models.ForeignKey(Corredor,limit_choices_to={'jor':True, 'giro':True, 'tipo': "Rider"}, related_name="jlg_sup", on_delete=models.CASCADE)
ganador_e1=models.ForeignKey(Corredor,limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="ganador_e1", on_delete=models.CASCADE)
ganador_e2=models.ForeignKey(Corredor, limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="ganador_e2", on_delete=models.CASCADE)
ganador_e3=models.ForeignKey(Corredor, limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="ganador_e3", on_delete=models.CASCADE)
ganador_e4=models.ForeignKey(Corredor, limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="ganador_e4", on_delete=models.CASCADE)
ganador_e5=models.ForeignKey(Corredor, limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="ganador_e5", on_delete=models.CASCADE)
ganador_e6=models.ForeignKey(Corredor, limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="ganador_e6", on_delete=models.CASCADE)
ganador_e7=models.ForeignKey(Corredor, limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="ganador_e7", on_delete=models.CASCADE)
ganador_e8=models.ForeignKey(Corredor, limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="ganador_e8", on_delete=models.CASCADE)
ganador_e9=models.ForeignKey(Corredor, limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="ganador_e9", on_delete=models.CASCADE)
ganador_e10=models.ForeignKey(Corredor, limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="ganador_e10", on_delete=models.CASCADE)
ganador_e11=models.ForeignKey(Corredor, limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="ganador_e11", on_delete=models.CASCADE)
ganador_e12=models.ForeignKey(Corredor, limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="ganador_e12", on_delete=models.CASCADE)
ganador_e13=models.ForeignKey(Corredor, limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="ganador_e13", on_delete=models.CASCADE)
ganador_e14=models.ForeignKey(Corredor, limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="ganador_e14", on_delete=models.CASCADE)
ganador_e15=models.ForeignKey(Corredor, limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="ganador_e15", on_delete=models.CASCADE)
ganador_e16=models.ForeignKey(Corredor, limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="ganador_e16", on_delete=models.CASCADE)
ganador_e17=models.ForeignKey(Corredor, limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="ganador_e17", on_delete=models.CASCADE)
ganador_e18=models.ForeignKey(Corredor, limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="ganador_e18", on_delete=models.CASCADE)
ganador_e19=models.ForeignKey(Corredor, limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="ganador_e19", on_delete=models.CASCADE)
ganador_e20=models.ForeignKey(Corredor, limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="ganador_e20", on_delete=models.CASCADE)
ganador_e21=models.ForeignKey(Corredor, limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="ganador_e21", on_delete=models.CASCADE)
ganador_tour=models.ForeignKey(Corredor,limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="maillot_amarillo", on_delete=models.CASCADE)
segundo_tour=models.ForeignKey(Corredor,limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="segundo", on_delete=models.CASCADE)
tercero_tour=models.ForeignKey(Corredor,limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="tercero", on_delete=models.CASCADE)
cuarto_tour=models.ForeignKey(Corredor,limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="cuarto", on_delete=models.CASCADE)
quinto_tour=models.ForeignKey(Corredor,limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="quinto", on_delete=models.CASCADE)
sexto_tour=models.ForeignKey(Corredor,limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="sexto", on_delete=models.CASCADE)
mv=models.ForeignKey(Corredor,limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="maillot_verde", on_delete=models.CASCADE)
mpr=models.ForeignKey(Corredor,limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="maillot_puntos_rojos", on_delete=models.CASCADE)
mb=models.ForeignKey(Corredor,limit_choices_to={'giro':True, 'nacimiento__gte': 1996}, related_name="maillot_blanco", on_delete=models.CASCADE)
sc=models.ForeignKey(Corredor,limit_choices_to={'giro':True, 'tipo': "Rider"}, related_name="supercombativo", on_delete=models.CASCADE)
me=models.ForeignKey(Corredor,limit_choices_to={'giro':True, '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
In Puntuacion a dorsal can have puntos in different categorias or maybe not to have any puntos. The objective is, in the model Equipo, for every Alias to have the total Sum of puntos acumulated by all the dorsal who are in the different fields (lid1, lid2, lid2,........gre1,gre2,.....).
I'm new in django and I think the use of annotate is the option, but I don´t know exactly how to do the query.
Thank you anyone who can help me.