RelatedManager“对象没有属性”说明

2024-05-19 01:49:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我执行请求http://167.71.57.114/api2/workout-exercises/3 我想接收关于WorkoutExercise对象编号3(详细视图)的数据

Got AttributeError when attempting to get a value for field description on serializer ExerciseSerializer. The serializer field might be named incorrectly and not match any attribute or key on the RelatedManager instance. Original exception text was: 'RelatedManager' object has no attribute 'description'.

序列化程序.py

class WorkoutExerciseSerializer(serializers.ModelSerializer):
    exercises = ExerciseSerializer()

    class Meta:
        model = WorkoutExercise
        fields = ('week', 'exercises')

视图.py

class WorkoutExerciseViewSet(viewsets.ModelViewSet):
    queryset = WorkoutExercise.objects.all()
    serializer_class = WorkoutExerciseSerializer
    http_method_names = ['get', 'post']

型号.py

class WorkoutExercise(models.Model):
    workout_program = models.ForeignKey(WorkoutProgram, on_delete=models.CASCADE, related_name='workout_exercises')
    week = models.PositiveIntegerField(default=1)
    day = models.PositiveIntegerField(default=1)
    order = models.PositiveIntegerField(default=1)

    def save(self, *args, **kwargs):
        if not self.pk:
            last_order = WorkoutExercise.objects.all().aggregate(largest=models.Max('order'))['largest']
            if last_order is not None:
                self.order = last_order + 1
        return super(WorkoutExercise, self).save(*args, **kwargs)

    def get_workout_programs(self):
        return self.workout_program.name

    def get_exercises(self):
        pass

    def __str__(self):
        return self.workout_program.name

    class Meta:
        ordering = ('week', 'day')

Tags: pyselfgetonmodelsdefnotorder
1条回答
网友
1楼 · 发布于 2024-05-19 01:49:02

基于exercises是复数的事实,以及RelatedManager错误,这意味着存在多个^{Exercises,因此您需要使用many=True参数序列化它们:

class WorkoutExerciseSerializer(serializers.ModelSerializer):
    exercises = ExerciseSerializer(many=True)

    class Meta:
        model = WorkoutExercise
        fields = ('week', 'exercises')

相关问题 更多 >

    热门问题