2017-05-08 94 views
0

我不能得到这个查询返回不止一个运动对象,即使如果我在SQL中使用生成的查询返回的练习都如我所料过滤的多对多在Django

class Workout(models.Model): 
    created = models.DateTimeField(auto_now_add=True) 
    workout_type = models.ForeignKey(WorkoutType, on_delete=models.CASCADE) 
    exercises = models.ManyToManyField(Exercise, through=u'WorkoutExercise', related_name=u'workout_exercises') 


class WorkoutExercise(models.Model): 
    exercise = models.ForeignKey(Exercise) 
    workout = models.ForeignKey(Workout) 

class Exercise(models.Model): 
    name = models.CharField(max_length=255, unique=True) 

而且该查询返回每个运动最新的锻炼

workouts = Workout.objects.latest('created') 
    exercises = Exercise.objects.filter(workout_exercises__exact=workouts) 

如前所述,这只有当查询它产生应该和它在SQL返回2返回一个锻炼。

回答

0

应该没有__exact工作:

exercises = Exercise.objects.filter(workout_exercises=workouts) 

可是你为什么不直接使用的exercises领域:

workout = Workout.objects.latest('created') # singular sounds more correct to me 
exercises = workout.exercises.all() 

BTW,即相关的名字是混乱的。我建议使用workouts或类似的方法,因为您通过exercise.workout_exercises管理Workout实例,而不是WorkoutExercise实例。

+0

感谢您的快速回复和建议 – DevOps1