簡體   English   中英

在Django中進行多對多過濾

[英]Filtering on many to many in Django

我無法獲得此查詢以返回多個練習對象,即使我在sql中使用生成的查詢,它也按預期返回了兩個練習

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時才返回單個練習。

它應該在沒有__exact情況下__exact

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

但是,為什么不直接使用exercises字段:

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

順便說一句,這個相關名稱令人困惑。 我建議進行workouts或類似方法,因為您是通過exercise.workout_exercises而不是WorkoutExercise實例來管理Workout實例的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM