我有ExerciseTrainingWorkout的模型。

Training包含一些练习(Exercise

Workout包含培训(Training)。

我的models.py的片段:

class Exercise(models.Model):
    user = models.ForeignKey(User, related_name='exercises',
                             on_delete=models.CASCADE)
    name = models.CharField(max_length=80)
    description = models.TextField(max_length=300)
    details = models.ManyToManyField(ExerciseDetail, blank=True)
...


class Training(models.Model):
    user = models.ForeignKey(User, related_name='trainings',
                             on_delete=models.CASCADE)
    name = models.CharField(max_length=80)
    description = models.CharField(max_length=250)
    exercises = models.ManyToManyField(Exercise, related_name='trainings',
                                       blank=True)
...


class Workout(models.Model):
    user = models.ForeignKey(User, related_name='workouts',
                             on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now=True)
    name = models.CharField(max_length=200)
    description = models.TextField(max_length=400, blank=True)
    trainings = models.ManyToManyField(Training, related_name='workouts',
                                       blank=True)
...


我希望有可能使用类似Workout.objects.get(name='workout').exercises.objects.all()的方法来获取所选锻炼训练中包含的所有练习的列表/集。

我也想有可能使用exercises`` field with Django Rest Framework to list all exercises, possibly with link to particular Exercise`''模型序列化器。

有人可以提示我该怎么做吗?

最佳答案

您可以使用以下查询:

Exercise.objects.filter(
    trainings__workouts__name='workout'
)


使用连续的下划线(__),您可以查找“直通”关系。

因此,这将返回名称为Exercise的,属于TrainingWorkout'Workout'

关于python - 如何处理从一个模型字段到另一模型字段的数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56852371/

10-12 22:49