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查询问题