Django OneToOne 关系 - 如何序列化它? [英] Django OneToOne relationship - how to serialize it?
问题描述
简单的示例学生和员工类,我想像下面这样序列化它,它应该是一对一的关系:
Simple example student and employee class, I want to serialize it like below and it should be OneToOne relationship:
{
"college": "string",
"year": "string",
"is_with_college": true,
"employee": {
"full_name": "string",
"email_id": "user@example.com",
"mobile_no": "string",
"is_job_ready": true,
"type": "string",
"location_preference": "string"
}
}
型号:
class Employee(models.Model):
full_name=models.CharField(max_length=100)
email_id=models.EmailField(max_length=100)
mobile_no=models.CharField(max_length=11)
is_job_ready=models.BooleanField(False)
type=models.CharField(max_length=20)
location_preference=models.CharField(max_length=20)
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, on_delete=models.CASCADE)
序列化器:
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(many=False)
class Meta:
model = Student
fields = ('college', 'year', 'is_with_college', 'employee')
def create(self, validated_data):
employee_data = validated_data.pop('employee')
if employee_data:
student = Student.objects.create(**validated_data)
Employee.objects.create(student=student, **employee_data)
return student
观看次数:
class EmployeeViewSet(viewsets.ModelViewSet):
serializer_class = EmployeeSerializer
queryset = Employee.objects.all()
class StudentViewSet(viewsets.ModelViewSet):
serializer_class = StudentSerializer
queryset = Student.objects.all()
我不确定我做错了什么.我正在尝试更改一些内容,但仍然有不同的错误.我确定这很简单,而且我遗漏了一些东西..此刻我有:
I'm not sure what I'm doing wrong. I'm trying to change a few things, still have different errors. I'm sure that it's simple and I'm missing something.. At this moment I have:
NOT NULL constraint failed: rest_student.employee_id
答案:一对一关系序列化程序
希望对某人有所帮助.
推荐答案
尽量关注 这个 答案.
将
employee = EmployeeSerializer(many=False)
更改为employee = EmployeeSerializer(read_only=True)
.
要检索所有学生或员工,您无需添加 def create(self,validated_data):
.这是更新/创建嵌套对象所必需的.
To retrieve all students or employee you don't need to add def create(self, validated_data):
. This is required for updating/creating nested objects.
这篇关于Django OneToOne 关系 - 如何序列化它?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!