您好,我是Django rest框架的新手。目前正在研究包含json响应的内容:
{
"students": [
{
"first_name": <str: student first name>,
"last_name": <str: student last name>,
"unique_id": <str: student unique id>,
"current_teachers": [
{
"first_name": <str: teacher first name>,
"last_name": <str: teacher last name>
},
...
]
},
...more...
]
}
这是我的序列化器:
class StudentFilterSerializer(serializers.ModelSerializer):
class Meta:
model = Student
fields = ("first_name", "last_name", "unique_id",)
class StudentFilterTeacherSerializer(serializers.ModelSerializer):
first_name = serializers.CharField(source='teacher.first_name')
last_name = serializers.CharField(source='teacher.last_name')
class Meta:
model = TeacherClass
fields = ("teacher","first_name","last_name")
class FilterStudentsSerializer(serializers.Serializer):
students = StudentFilterSerializer(many=True)
current_teachers = StudentFilterTeacherSerializer(many=True, required=False)
现在如何编辑我的序列化程序以实现json响应。 因为这是我当前的json结构:
serializer = FilterStudentsSerializer()
serializer.data
{'students': [], 'current_teachers': []}
答案 0 :(得分:3)
如果我们可以看到您的模型是如何实现的,则提供正确答案会更容易。在不知道字段连接的情况下,我仍然会尝试
有两种解决方案:
第一
class StudentFilterTeacherSerializer(serializers.ModelSerializer):
first_name = serializers.CharField(source='teacher.first_name')
last_name = serializers.CharField(source='teacher.last_name')
class Meta:
model = TeacherClass
fields = ("first_name","last_name")
class StudentFilterSerializer(serializers.ModelSerializer):
current_teachers = SerializerMethodField(required=False)
class Meta:
model = Student
fields = ("first_name", "last_name", "unique_id", "current_teachers")
def current_teachers(self, student):
# Get all teachers for this student
# I don't know how your models are created but you'll get the idea
# assuming you have "related_name" setup between student and teachers
teachers = student.teachers.all()
return StudentFilterTeacherSerializer(teachers, many=True).data
和第二(可能不是您想要的,仍然是您所知):
注意:这将返回教师的所有字段。
class StudentFilterSerializer(serializers.ModelSerializer):
class Meta:
model = Student
fields = ("first_name", "last_name", "unique_id",)
# if you somehow have teachers field in 'student' model then you can also do
depth = 1
很乐意提供帮助。 让我知道它是否有效,或者您什么都不懂。