python - 序列化具有一对一关系的对象 Django

标签 python django rest serialization django-rest-framework

我是 django 的新手。我正在研究一个休息 api。我有一个可选的"is"关系,即学生是雇员。我正在尝试序列化这两个模型,以便获得组合的 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)

最佳答案

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

关于python - 序列化具有一对一关系的对象 Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30548337/

相关文章:

python - VTK 的 Python 绑定(bind)问题

Python - 从 JSON 创建字典时遇到问题

python - 如何使用 postman 从 Django Rest Framework 获取 token

node.js - POST 多对多 express 请求

java - 其余输出与控制台与 Tomcat localhost 不同

python - 根据列值和列表创建列

python - 如何在 django 项目上使用 docker 安装 postgres 扩展

javascript - 如何在 Django 中使用由 html 和 css 制作的注册表单

登录中的 Django 信号

rest - 使用rest api关闭binance future 头寸时如何取消止损和止盈订单