用一对一关系序列化对象Django [英] Serialize Objects with One-to-One Relationship Django

查看:160
本文介绍了用一对一关系序列化对象Django的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是django的新手。我正在研究Rest API。我有一个可选的是关系,即学生是一名雇员。我正在尝试序列化这两个模型,以便获得合并的json结果。请让我知道是否有人可以帮助我。谢谢

I am a newbie in django. I am working on a rest api. I have an optional "is a" relationship i.e Student is a Employee. I am trying to serialize these 2 models such that I get combined json result. Please let me know if anyone can help me with this. Thanks

class Employee(models.Model):
    full_name=models.CharField(max_length=100,blank=True)
    email_id=models.EmailField(max_length=100,blank=True)
    mobile_no=models.CharField(max_length=11,blank=True)
    is_job_ready=models.BooleanField(False)
    type=models.CharField(max_length=20,blank=True)
    location_preference=models.CharField(max_length=20,blank=True)

class Student(models.Model):
    college=models.CharField(max_length=100)
    year=models.CharField(max_length=20)
    is_with_college=models.BooleanField()
    employee=models.OneToOneField(Employee,primary_key=True)


推荐答案

Django REST框架有一些不错的序列化嵌套对象的工具。

The Django REST framework has some nice tools for serializing nested objects.

您需要他们所说的嵌套的关系。像这样-

You need what they call a Nested Relationship. Like this -

from rest_framework import serializers

# define your models here ...

class EmployeeSerializer(serializers.ModelSerializer):
  class Meta:
    model = Employee
    fields = ('full_name', 'email_id', 'mobile_no', 'is_job_ready', 'type', 'location_preference')

class StudentSerializer(serializers.ModelSerializer):
  employee = EmployeeSerializer(read_only = True)

  class Meta:
    model = Student
    fields = ('college', 'year', 'is_with_college', 'employee')

然后,您可以加载序列化程序并使用类似的东西-

Then, you can load your serializer and use it something like this -

from myapp.models import StudentSerializer

student = Student.objects.first()
serializer = StudentSerializer(student)

serializer.data
# { 'college': 'Naropa University',
#    'is_with_college': True,
#    'year': '2015'}
#    'employee': {
#      'full_name' : 'Chogyam Trungpa',
#      'email_id' : 'teacher@naropa.edu',
#      'mobile_no' : '555-555-5555',
#      'is_job_ready' : True,
#      'type' :'Teacher',
#      'location_preference' : 'Boulder, CO'
#    }
#  }

这篇关于用一对一关系序列化对象Django的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆