Django OneToOne 관계-직렬화하는 방법?
Nov 14 2020
간단한 예제 학생 및 직원 클래스, 아래와 같이 직렬화하고 OneToOne 관계 여야합니다.
{
"college": "string",
"year": "string",
"is_with_college": true,
"employee": {
"full_name": "string",
"email_id": "[email protected]",
"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()
내가 뭘 잘못하고 있는지 잘 모르겠습니다. 몇 가지를 변경하려고하는데 여전히 다른 오류가 있습니다. 나는 그것이 간단하고 내가 뭔가를 놓치고 있다고 확신한다 ..이 순간 나는 :
NOT NULL constraint failed: rest_student.employee_id
답변 : OneToOne 관계 직렬 변환기
누군가에게 도움이되기를 바랍니다.
답변
1 tarasinf Nov 14 2020 at 09:31
이 대답 을 따르십시오 .
변경
employee = EmployeeSerializer(many=False)
에employee = EmployeeSerializer(read_only=True)
.모든 학생 또는 직원을 검색하려면을 추가 할 필요가 없습니다
def create(self, validated_data):
. 중첩 된 개체를 업데이트 / 만들기 위해 필요합니다.
user10620635 Nov 14 2020 at 12:43
내 질문에 대한 대답은 다음과 같습니다. OneToOne Relationship serializer