SerializerMethodField не показывает все поля сериализатора, когда не существует отношения FK
Желаемый результат У меня есть вложенный ответ API, как показано ниже:
{
"subject": {
"name": "math",
"teacher": <uuid>,
"teacher_name": "John"
},
"grade": 1,
}
teacher_name - это пользовательское поле, которое использует teacher.
Он работает, когда установлены subject и grade. Но когда FK subject установлен null, я получаю такой ответ
Нежелательный результат
{
"subject": {
"name": "",
"teacher": null,
},
"grade": 1,
}
Вопрос:
Я бы хотел, чтобы teacher_name также появлялся. Я пробовал настроить его как serializers.CharField
teacher_name= serializers.CharField(
source="teacher.name",
read_only=True,
allow_blank=True,
default=None,
)
и serializers.SerializerMethodField
teacher_name= serializers.SerializerMethodField()
def get_subject_teacher(self, obj):
return obj.teacher.name
Но безуспешно.
Вот мой сериализатор для вложенного API
class StudentSerializer(serializers.ModelSerializer):
subject = serializers.SerializerMethodField()
def get_subject(self, obj):
filtered_obj = getattr(obj, "subject", None)
return SubjectSerializer(filtered_obj).data
class Meta:
model = Student
fields = (
"subject",
"grade",
)
class SubjectSerializer(serializers.ModelSerializer):
teacher_name= serializers.CharField(
source="teacher.name",
read_only=True,
allow_blank=True,
default=None,
)
class Meta:
model = Subject
fields = (
"name",
"teacher",
"teacher_name",
)
Попробуйте это:
class SubjectSerializer(serializers.ModelSerializer):
teacher_name= serializers.CharField(
source="teacher.name",
read_only=True,
allow_blank=True,
default="",
)
class Meta:
model = Subject
fields = (
"name",
"teacher",
"teacher_name",
)