Как получить значение поля дочерней модели из сериализатора родительской модели в 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__'