Django rest framework 通过对DRF中主模型的单个Get请求获取相关模型条目

Django rest framework 通过对DRF中主模型的单个Get请求获取相关模型条目,django-rest-framework,django-serializer,Django Rest Framework,Django Serializer,我有一个主模型和六个其他模型,它们是与我的主模型相关的外键 我的型号: #MASTER TABLE class UserDetails(models.Model): user_id = models.UUIDField(primary_key=True,default=uuid.uuid4,editable=False) first_name = models.CharField(max_length=255) last_name = models.CharField(m

我有一个主模型和六个其他模型,它们是与我的主模型相关的外键

我的型号:

#MASTER TABLE
class UserDetails(models.Model):
    user_id = models.UUIDField(primary_key=True,default=uuid.uuid4,editable=False)
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)

#RELATED TABLES
class EducationProfile(models.Model):
    degree_level = models.CharField(max_length=100, null=True, blank=True)
    degree = models.CharField(max_length=100, null=True, blank=True)
    start_date = models.DateField(null=True, blank=True)
    completion_date = models.DateField(null=True, blank=True)
    user = models.ForeignKey(UserDetails, related_name='education')

class AwardsRecognitions(models.Model):
    award_name = models.CharField(max_length=100, null=True, blank=True)
    awarded_by = models.CharField(max_length=100, null=True, blank=True)
    award_date = models.DateField(null=True, blank=True)
    user = models.ForeignKey(UserDetails, related_name='awards')
我正在尝试获取所有相关模型的信息,并向
UserDetails
模型发出GET请求。我曾尝试在
UserDetailsSerializer
中使用
primarykeyrelated字段
,但这并没有提供预期的输出。结果是嵌套字段中只有相关条目的id

我的序列化程序:

class UserDetailsSerializer(serializers.ModelSerializer):
    education = serializers.PrimaryKeyRelatedField(read_only=True, many=True)
    awards = serializers.PrimaryKeyRelatedField(read_only = True, many = True)

    class Meta:
        model = UserDetails
        fields = '__all__'

class EducationProfileSerializer(serializers.ModelSerializer):

    class Meta:
        model = EducationProfile
        fields = '__all__'

class AwardsRecognitionsSerializer(serializers.ModelSerializer):

    class Meta:
        model = AwardsRecognitions
        fields = '__all__'
预期结果

获取请求格式-//

响应格式-

{"user_id" : <<user_id>>,
 "first_name" : "foo",
 "last_name" : "bar",
 "education":[{"id":5,
               "degree_level": "xxxx",
               "degree":"xxxx",
               "start_date":"xxxx",
               "completion_date":"xxxx"},
              {"id":7,
               "degree_level": "yyyy",
               "degree":"yyyy",
               "start_date":"yyyy",
               "completion_date":"yyyy"}],
 "awards":[{"id":3,
            "award_name":"nnnn",
            "awarded_by":"nnnn",
            "awarded_date":"nnnn"},
           {"id":7,
            "award_name":"mmm",
            "awarded_by":"mmmm",
            "award_date":"mmmm"}]
{“用户id”:,
“名字”:“foo”,
“姓氏”:“酒吧”,
“教育”:[{“id”:5,
“学位水平”:“xxxx”,
“学位”:“xxxx”,
“开始日期”:“xxxx”,
“完工日期”:“xxxx”},
{“id”:7,
“学位水平”:“yyyy”,
“学位”:“yyyy”,
“开始日期”:“yyyy”,
“完成日期”:“yyyy”}],
“奖励”:[{“id”:3,
“奖项名称”:“nnnn”,
“授予者”:“nnnn”,
“授予日期”:“nnnn”},
{“id”:7,
“奖项名称”:“嗯,
“授予者”:“mm”,
“授予日期”:“mmmm”}]

请为我指出实现这一目标的正确方向,任何想法都值得赞赏。TIA为您为相关模型而不是主键相关字段创建的模型包含序列化程序。PrimaryKeyRelatedField将只为您提供JSON中的主键,顾名思义

class UserDetailsSerializer(serializers.ModelSerializer):
    education = EducationProfileSerializer(many=True, read_only=True)
    awards = AwardsRecognitionsSerializer(many=True, read_only=True)

    class Meta:
        model = UserDetails
        fields = '__all__'

有关更多详细信息,请签出

谢谢。我也尝试过,我得到了预期的输出。性能方面我不确定这是否是获得输出的最佳方式。你能帮我从这个角度理解吗?性能方面的确切含义是什么?这是DRF文档中提到的推荐方式。如果是per性能您指的是由于处理多个相关模型而生成的查询数,那么它将取决于您的查询集,只需确保您不会遇到N+1查询问题