如何根据用户组合两个不同的模型,并发送一个单一的响应- Django Rest框架



我的项目中有两个不同的模型。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/