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 중국어 웹사이트의 기타 관련 기사를 참조하세요!