[PYTHON] Comment implémenter un sérialiseur imbriqué avec drf-flex-fields

Je suis tombé sur l'implémentation d'un sérialiseur imbriqué, donc je vais l'écrire sous forme de note.

Installez drf-flex-fields

pip install drf-flex-fields

model

model.py


class User(models.Model):
    username = models.CharField(max_length=255)


class Tag(models.Model):
    name = models.CharField(max_length=255)


class Book(models.Model):
    title = models.CharField(max_length=255)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    tag = models.ManyToManyField(Tag)

serializer

serializers.py


from rest_flex_fields import FlexFieldsModelSerializer


class UserSerializer(FlexFieldsModelSerializer):
    class Meta:
        model = User
        fields = ("id", "username")


class TagSerializer(FlexFieldsModelSerializer):
    class Meta:
        model = User
        fields = ("id", "name")


class BookSerializer(FlexFieldsModelSerializer):
    class Meta:
        model = Book
        fields = ("id", "title", "author", "tag")
        expandable_fields = {                        #expandable_Niché dans les champs
            "author": UserSerializer,
            "tag": (TagSerializer, {"many": True})   #Plusieurs à plusieurs
        }

Response

[
    {
        "id": 1,
        "title": title_1,
        "author": 1,
        "tag": [
            1,
            2,
        ]
    },
]

Affichage dynamique des données

Afficher des données dynamiques avec des paramètres

option Explication
expand Développez le champ spécifié
fields Afficher uniquement les champs spécifiés
omit Le champ spécifié n'est pas affiché

expand http://localhost:8000/book/1?expand=author,tag Développer l'auteur et la balise

[
    {
        "id": 1,
        "title": title_1,
        "author": {
            "id": 1,
            "username": "user_1"
        },
        "tag": [
            {
                "id": 1,
                "name": "tag_1"
            },
                        {
                "id": 2,
                "name": "tag_2"
            },
        ]
    },
]

fields http://localhost:8000/book/1?fields=title Afficher uniquement le titre

[
    {
        "title": title_1,
    },
]

omit http://localhost:8000/book/1?omit=title Ne pas afficher le titre

[
    {
        "id": 1,
        "author": 1,
        "tag": [
            1,
            2,
        ]
    },
]

référence

rsinger86/drf-flex-fields - github drf-flex-fields - pypi

Recommended Posts

Comment implémenter un sérialiseur imbriqué avec drf-flex-fields
Comment implémenter la fonctionnalité de type helper Rails dans Django
Comment implémenter la mémoire partagée en Python (mmap.mmap)
Comment implémenter un sélecteur de dégradé dans Houdini
Comment développer en Python
Comment implémenter provisoirement une barre de progression dans un langage de script
Comment implémenter Python EXE pour Windows avec le conteneur Docker
[Python] Comment faire PCA avec Python
Comment gérer une session dans SQLAlchemy
Comment écrire sobrement avec des pandas
Comment utiliser SQLite en Python
Comment convertir 0,5 en 1056964608 en un seul coup
Comment refléter CSS dans Django
Comment tuer des processus en vrac
Comment utiliser Mysql avec python
Comment envelopper C en Python
Comment utiliser ChemSpider en Python
Comment utiliser PubChem avec Python
Comment exécuter du code TensorFlow 1.0 en 2.0
Comment gérer le japonais avec Python
Comment se connecter à Docker + NGINX
Comment appeler PyTorch dans Julia
Comment implémenter du code Java en arrière-plan de Red Hat (Linux ONE)
Comment utiliser les colonnes calculées dans CASTable
J'ai essayé d'implémenter PLSA en Python
J'ai essayé d'implémenter la permutation en Python
Comment définir dynamiquement des variables en Python
Comment faire R chartr () en Python
Comment convertir csv en tsv dans la CLI
[Itertools.permutations] Comment créer une séquence en Python
Comment utiliser Google Test en langage C
J'ai essayé d'implémenter PLSA dans Python 2
Comment utiliser BigQuery en Python
Comment exécuter des commandes avec Jupyter Notebook
Comment faire 'git fetch --tags' dans GitPython
Comment obtenir stacktrace en python
Comment afficher la table quatre-vingt-dix-neuf en python
Comment extraire une zone de polygone en Python
Comment réattribuer un index dans pandas dataframe
Comment vérifier la version d'opencv avec python
J'ai essayé d'implémenter ADALINE en Python
Comment activer SSL (TLS) dans Apache
Comment utiliser l'interpréteur d'Anaconda avec PyCharm
Comment spécifier une cible non vérifiée dans Flake8
J'ai essayé d'implémenter PPO en Python
Comment gérer des valeurs consécutives dans MySQL
Comment changer de version de Python dans cloud9
Comment régler le contraste de l'image en Python
Comment utiliser __slots__ dans la classe Python
Comment remplir dynamiquement des zéros avec Python
Comment faire des événements envoyés par le serveur dans Django
Comment utiliser les expressions régulières en Python
Comment utiliser Map dans ViewPager d'Android
Comment afficher Hello World en python
Comment lire des fichiers CSV avec Pandas
Comment changer la couleur de l'éditeur dans PyCharm
Comment écrire ce processus en Perl?