我的项目中有两个不同的模型。StudentDetail模型与student-user和enrollment mentlist有一对一的连接。与学生用户有外键连接。我想为特定的学生用户组合来自两个模型的信息,并将它们作为单个响应发送,而不是发送不同的响应。下面是模型及其序列化器
StudentDetail/models.py
class StudentDetail(models.Model):
id = models.UUIDField(primary_key=True, editable=False, default=uuid.uuid4)
user = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
name = models.CharField(max_length=100, null=True, blank=True)
StudentDetailSerializer
class StudentDetailSerializer(serializers.ModelSerializer):
class Meta:
model = StudentDetail
fields = "__all__"
注册/models.py
class EnrollmentList(models.Model):
id = models.UUIDField(primary_key=True, editable=False, default=uuid.uuid4)
student = models.ForeignKey(CustomUser, on_delete=models.CASCADE, related_name='student')
EnrollSerializer
class AllReqs(serializers.ModelSerializer):
class Meta:
model = EnrollmentList
fields = ['id','student_name', 'student_parent_name', 'standard', 'applying_for_standard', "board", 'home_tuition', 'address']
现在假设发出了一个请求,我想将来自特定学生用户的StudentDetail和enrollment mentlist的信息组合起来,以获得一个序列化的数据,如下面的示例所示,并将其作为单个响应发送
{
"student_name": name, #from StudentDetail
"home_tuition": home_tuition #from EnrollmentList
}
请告诉我做这件事的正确方法
像这样定义序列化器:
class AllReqs(serializers.ModelSerializer):
student_name = serializers.CharField(source='student.user.name')
class Meta:
model = EnrollmentList
fields = ['id','student_name', 'home_tuition']
附加的StudentDetail序列化器:
class StudentDetailSerializer(serializers.ModelSerializer):
student_name = serializers.CharField(source='user.name')
home_tuition = serializers.SerializerMethodField()
class Meta:
model = StudentDetail
fields = ['id','student_name', 'home_tuition']
def get_home_tuition(self, obj):
for enrollment in obj.user.students.all():
return enrollment.home_tuition
我恳请提问者参考Django-Rest-Framework文档。https://www.django-rest-framework.org/