Il semble que Django ne puisse pas grouper les valeurs après avoir utilisé un filtre avec une expression F(). Par exemple:Django .values () après le filtre d'expression F()
(models.py)
class Athlete(models.Model):
name = models.CharField(max_length=30)
nationality = models.CharField(max_length=30)
class TrainingSession(models.Model):
training_date = models.DateTimeField()
location = models.CharField(max_length=30)
athlete = models.ForeignKey(Athlete)
class Run(models.Model):
run_time = models.IntegerField()
training = models.ForeignKey(TrainingSession)
(views.py) Je veux que le nombre de coureurs pour chaque endroit où ils ont eu leur meilleure course.
r = Run.objects.all()
# Annotate the best time from the training session and filter
r = r.annotate(best_run_time = Min('trainingsession__run__run_time'))
r = r.filter(run_time = F('best_run_time'))
# Group by location
r = r.values('location')
r = r.annotate(athlete_count = Count('trainingsession_athlete', distinct=True))
Quand je ne pas utiliser l'expression F()
, le groupe volonté .values('location')
le résultat par emplacement. Cependant, quand je l'utilise, chaque emplacement est donné plusieurs fois avec un athlete_count de 1.
Comment pouvez-vous obtenir "le nombre de coureurs pour chaque endroit où ils ont eu leur meilleure course"? (un seul a best_runtime pour l'emplacement) –
Oui, mais pour un certain endroit, plusieurs coureurs pourraient avoir leur meilleur résultat. – user2621686
Ce que vous ferez Si le temps à deux endroits sera le même pour un athlète? Est-ce que ça devrait le compter dans les deux endroits? Je le pense, juste pour clarifier. –