Как получить значение поля дочерней модели из сериализатора родительской модели в Django Rest Framework?

Я пытаюсь получить доступ к значению дочерней модели из сериализатора родительской модели.

Родительские модели

class Course(models.Model):
    name = models.CharField(max_length=100)

Детские модели

class CourseStaff(models.Model):
    course = models.ForeignKey(Course, on_delete=models.CASCADE, 
        related_name='course_staff_course')
    staff = models.ForeignKey(User, on_delete=models.CASCADE, 
        related_name='course_staff_user')
    enable = models.BooleanField()

Класс сериализатора

class TeacherCourseSerializer(serializers.ModelSerializer):

    class Meta:
        model = Course
        fields = '__all__'

Ожидаемый результат

[
{
    id: 1,
    name: "",
    staff_id: 5, #<---- It will come from the child model.
    is_enabled: true #<---- It will come from the child model.
}
]

Я пробовал с этим

Сериализатор

class TeacherCourseSerializer(serializers.ModelSerializer):
    enable = serializers.CharField(source='course_staff_course.enable')
    class Meta:
        model = Course
        fields = '__all__'

Но получаем ошибку

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

Как я могу этого достичь?

Спасибо

Сотрудники курса - это отношения один ко многим. Связанный менеджер не вернет один объект, вместо этого он вернет несколько объектов. Вместо этого вы можете попробовать другой подход, если у курса будет только один сотрудник, используйте OneToOneField и продолжайте в том же духе.

Другой способ - создать вложенный сериализатор для персонала и использовать в сериализаторе курса.

class CourseStaffSerializer(serializers.ModelSerializer):
    class Meta:
        model = CourseStaff
        fields = '__all__'

class TeacherCourseSerializer(serializers.ModelSerializer):
    teachers = CourseStaffSerializer(many=True, read_only=True)
    class Meta:
       model = Course
       fields = '__all__'
Вернуться на верх