Maison  >  Article  >  développement back-end  >  Comment attribuer des clés étrangères imbriquées dans le framework Django REST : une approche simplifiée

Comment attribuer des clés étrangères imbriquées dans le framework Django REST : une approche simplifiée

Susan Sarandon
Susan Sarandonoriginal
2024-11-25 13:17:15336parcourir

How to Assign Nested Foreign Keys in Django REST Framework: A Simplified Approach

Attribution de clés étrangères imbriquées : une approche simplifiée

Question

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.

Solution imbriquée la plus simple

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.

Approche générique

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn