>백엔드 개발 >파이썬 튜토리얼 >Django REST Framework를 사용하여 중첩된 직렬 변환기에 외래 키를 할당하는 방법은 무엇입니까?

Django REST Framework를 사용하여 중첩된 직렬 변환기에 외래 키를 할당하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-11 20:52:02790검색

How to Assign Foreign Keys in Nested Serializers with Django REST Framework?

DRF: 중첩된 직렬 변환기를 사용한 단순 외래 키 할당

Django REST Framework 내에서 표준 ModelSerializer는 다음을 통해 ForeignKey 모델 관계의 할당 또는 수정을 허용합니다. ID를 정수로 게시합니다. 그러나 중첩된 직렬 변환기에서 이 동작을 추출하는 것은 어려울 수 있습니다.

가장 간단한 중첩 직렬 변환기 접근 방식

DRF는 본질적으로 이 기능을 제공하지 않으므로 사용자 정의 직렬 변환기 필드가 필요합니다. :

from rest_framework import serializers

class RelatedFieldAlternative(serializers.PrimaryKeyRelatedField):
    def __init__(self, **kwargs):
        # Serializer for this field
        self.serializer = kwargs.pop('serializer', None)
        if self.serializer is not None and not issubclass(self.serializer, serializers.Serializer):
            raise TypeError('"serializer" is not a valid serializer class')

        super().__init__(**kwargs)

    def use_pk_only_optimization(self):
        # Avoid using PK optimization if a serializer is provided
        return False if self.serializer else True

    def to_representation(self, instance):
        # Use provided serializer or default representation
        if self.serializer:
            return self.serializer(instance, context=self.context).data
        return super().to_representation(instance)

상위 직렬 변환기에서 다음과 같이 이 새 필드를 사용합니다.

class ParentSerializer(ModelSerializer):
    child = RelatedFieldAlternative(queryset=Child.objects.all(), serializer=ChildSerializer)

    class Meta:
        model = Parent
        fields = '__all__'

이 일반적인 접근 방식을 사용하면 이 기능을 사용하여 여러 직렬 변환기를 쉽게 처리할 수 있습니다.

to_representation()을 재정의하는 메서드

또는 상위 직렬 변환기의 to_representation() 메서드를 재정의해도 이 목표를 달성할 수 있습니다.

class ParentSerializer(ModelSerializer):
    def to_representation(self, instance):
        response = super().to_representation(instance)
        response['child'] = ChildSerializer(instance.child).data
        return response

이 메서드에는 정의가 필요합니다. 창작과 독서 분야가 다르기 때문에 이상적이지 않을 수도 있습니다.

위 내용은 Django REST Framework를 사용하여 중첩된 직렬 변환기에 외래 키를 할당하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.