Les sérialiseurs de modèles dans Django REST Framework gèrent les relations de clés étrangères en permettant la publication d'entiers d'identification à des fins de mission. Cependant, étendre ce comportement aux sérialiseurs imbriqués pose un défi, en particulier lorsqu'il s'agit uniquement d'attribuer des objets de base de données existants.
En l'absence de prise en charge prête à l'emploi, on peut remplacez to_representation() dans le sérialiseur parent pour inclure les données enfants imbriquées :
class ParentSerializer(ModelSerializer): def to_representation(self, instance): response = super().to_representation(instance) response['child'] = ChildSerializer(instance.child).data return response
Cette approche fournit une solution simple et efficace pour créer et lire les instances parent avec des enfants imbriqués.
Pour une gestion plus généralisée, un champ de sérialiseur personnalisé peut être utilisé :
class RelatedFieldAlternative(serializers.PrimaryKeyRelatedField): def __init__(self, **kwargs): ... def use_pk_only_optimization(self): ... def to_representation(self, instance): ...
En définissant ce champ dans le parent sérialiseur et définition du sérialiseur sur la classe de sérialiseur enfant, l'attribution de clé étrangère peut être réalisée à l'aide d'une seule clé :
class ParentSerializer(ModelSerializer): child = RelatedFieldAlternative(queryset=Child.objects.all(), serializer=ChildSerializer)
L'avantage de ceci La méthode générique réside dans son applicabilité à plusieurs sérialiseurs nécessitant ce comportement, réduisant ainsi le besoin de champs et de méthodes personnalisés pour chacun.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!