Asignación de claves externas con serializadores anidados en Django REST Framework
Django REST Framework (DRF) proporciona una manera conveniente de administrar las relaciones de claves externas en datos serializados. Sin embargo, obtener el comportamiento deseado en serializadores anidados puede ser un desafío.
Asignación de clave externa en serializadores anidados
Los serializadores anidados heredan el comportamiento de sus serializadores principales. Por defecto, no permiten la asignación o modificación directa de claves foráneas. Para superar esto, un enfoque común es especificar un campo adicional para el ID de la clave externa. Sin embargo, esto puede llevar a un desarrollo front-end ambiguo.
Soluciones alternativas
1. Método to_representation() personalizado:
Una solución es anular el método to_representation() del serializador principal. Esto permite la inclusión de datos personalizados en la respuesta serializada.
def to_representation(self, instance): response = super().to_representation(instance) response['child'] = ChildSerializer(instance.child).data return response
Este enfoque garantiza que la clave externa se represente como un objeto serializador anidado, lo que permite tanto la creación como la lectura utilizando la misma clave.
2. Campo relatedFieldAlternative:
Una solución más genérica es crear un campo de serializador personalizado que se comporte de manera diferente al PrimaryKeyRelatedField predeterminado.
class RelatedFieldAlternative(serializers.PrimaryKeyRelatedField): def to_representation(self, instance): if self.serializer: return self.serializer(instance, context=self.context).data return super().to_representation(instance)
Este campo permite especificar un serializador para la representación de la clave externa.
Usando el campo relatedFieldAlternative
El campo RelatedFieldAlternative se puede usar en el serializador principal de la siguiente manera:
class ParentSerializer(ModelSerializer): child = RelatedFieldAlternative(queryset=Child.objects.all(), serializer=ChildSerializer)
Beneficios de usar el campo personalizado
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3