当不存在 FK 关系时,SerializerMethodField 不显示序列化程序的所有字段
SerializerMethodField not showing all fields of serializer when no FK relationship exists
想要的结果:
我有一个嵌套的 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",
allow_blank=True,
default=None,
)
class Meta:
model = Subject
fields = (
"name",
"teacher",
"teacher_name",
)
想要的结果:
我有一个嵌套的 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",
allow_blank=True,
default=None,
)
class Meta:
model = Subject
fields = (
"name",
"teacher",
"teacher_name",
)