【问题标题】:Serialize Objects with One-to-One Relationship Django使用一对一关系 Django 序列化对象
【发布时间】:2015-08-13 10:15:27
【问题描述】:

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

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)

【问题讨论】:

  • 你的序列化器到目前为止是什么样子的?你在寻找什么输出?

标签: python django rest serialization django-rest-framework


【解决方案1】:

您可以使用@metahamza 方式,或使用depth 关键字参考文档here

指定嵌套序列化 默认的 ModelSerializer 使用主键来表示关系,但您也可以使用 depth 选项轻松生成嵌套表示:

class AccountSerializer(serializers.ModelSerializer):
    class Meta:
        model = Account
        fields = ['id', 'account_name', 'users', 'created']
        depth = 1

深度选项应设置为整数值,指示在恢复为平面表示之前应遍历的关系的depth

【讨论】:

    【解决方案2】:

    Django REST framework 有一些用于序列化嵌套对象的好工具。

    您需要他们所谓的Nested Relationship。像这样-

    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')
    

    然后,您可以加载您的序列化程序并像这样使用它 -

    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'
    #    }
    #  }
    

    【讨论】:

    猜你喜欢
    • 2017-10-05
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    相关资源
    最近更新 更多