Maison > développement back-end > Tutoriel Python > 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
Libérer: 2024-11-25 13:17:15
original
386 Les gens l'ont consulté

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
Copier après la connexion

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):
        ...
Copier après la connexion

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)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal