【问题标题】:RelatedManager' object has no attribute 'descriptionRelatedManager' 对象没有属性 'description
【发布时间】:2021-03-28 10:14:24
【问题描述】:

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

尝试在序列化程序 ExerciseSerializer 上获取字段 description 的值时出现 AttributeError。 序列化程序字段可能命名不正确,并且与 RelatedManager 实例上的任何属性或键都不匹配。 原始异常文本是:“RelatedManager”对象没有属性“描述”。

serializers.py

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

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

views.py

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

models.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')

【问题讨论】:

    标签: python django


    【解决方案1】:

    基于exercises是复数,而RelatedManager错误,则表示Exercises多个,所以需要用many=True参数序列化这些:

    class WorkoutExerciseSerializer(serializers.ModelSerializer):
        exercises = ExerciseSerializer(many=True)
    
        class Meta:
            model = WorkoutExercise
            fields = ('week', 'exercises')

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    • 2017-03-04
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    相关资源
    最近更新 更多