[PYTHON] So implementieren Sie einen verschachtelten Serializer mit drf-flex-Feldern

Ich bin auf die Implementierung eines verschachtelten Serialisierers gestoßen, daher schreibe ich ihn als Notiz.

Installieren Sie drf-flex-Felder

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_In Feldern verschachtelt
            "author": UserSerializer,
            "tag": (TagSerializer, {"many": True})   #Viel zu viel
        }

Response

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

Dynamische Anzeige von Daten

Dynamische Daten mit Parametern anzeigen

Möglichkeit Erläuterung
expand Erweitern Sie das angegebene Feld
fields Nur angegebene Felder anzeigen
omit Das angegebene Feld wird nicht angezeigt

expand http://localhost:8000/book/1?expand=author,tag Erweitern Sie Autor und Tag

[
    {
        "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 Zeigen Sie nur den Titel an

[
    {
        "title": title_1,
    },
]

omit http://localhost:8000/book/1?omit=title Zeigen Sie den Titel nicht an

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

Referenz

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

Recommended Posts

So implementieren Sie einen verschachtelten Serializer mit drf-flex-Feldern
So implementieren Sie Rails-Helfer-ähnliche Funktionen in Django
So implementieren Sie Shared Memory in Python (mmap.mmap)
So implementieren Sie eine Verlaufsauswahl in Houdini
Wie man in Python entwickelt
So implementieren Sie vorläufig einen Fortschrittsbalken in einer Skriptsprache
So implementieren Sie Python EXE für Windows mit Docker-Container
[Python] Wie man PCA mit Python macht
Umgang mit Sitzungen in SQLAlchemy
Wie man nüchtern mit Pandas schreibt
Verwendung von SQLite in Python
So konvertieren Sie 0,5 in 1056964608 auf einmal
Wie man CSS in Django reflektiert
Wie man Prozesse in großen Mengen abbricht
Wie man MySQL mit Python benutzt
So verpacken Sie C in Python
Verwendung von ChemSpider in Python
Verwendung von PubChem mit Python
So führen Sie TensorFlow 1.0-Code in 2.0 aus
Umgang mit Japanisch mit Python
So melden Sie sich bei Docker + NGINX an
So rufen Sie PyTorch in Julia an
So implementieren Sie Java-Code im Hintergrund von Red Hat (Linux ONE)
Verwendung berechneter Spalten in CASTable
Ich habe versucht, PLSA in Python zu implementieren
Ich habe versucht, Permutation in Python zu implementieren
Dynamisches Definieren von Variablen in Python
So machen Sie R chartr () in Python
So konvertieren Sie csv in tsv in CLI
[Itertools.permutations] So löschen Sie eine Sequenz in Python
Verwendung von Google Test in C-Sprache
Ich habe versucht, PLSA in Python 2 zu implementieren
So arbeiten Sie mit BigQuery in Python
So führen Sie Befehle mit einem Jupyter-Notebook aus
Wie man in GitPython '--gags fetch --tags' macht
Wie bekomme ich Stacktrace in Python?
So zeigen Sie die neunundneunzig Tabelle in Python an
So extrahieren Sie einen Polygonbereich in Python
So weisen Sie den Index im Pandas-Datenrahmen neu zu
So überprüfen Sie die Version von opencv mit Python
Ich habe versucht, ADALINE in Python zu implementieren
So aktivieren Sie SSL (TLS) in Apache
Verwendung von Anacondas Interpreter mit PyCharm
So legen Sie ein nicht geprüftes Ziel in Flake8 fest
Ich habe versucht, PPO in Python zu implementieren
Umgang mit aufeinanderfolgenden Werten in MySQL
So wechseln Sie die Python-Version in Cloud9
So passen Sie den Bildkontrast in Python an
Verwendung von __slots__ in der Python-Klasse
So füllen Sie mit Python dynamisch Nullen aus
So führen Sie vom Server gesendete Ereignisse in Django durch
Verwendung regulärer Ausdrücke in Python
So verwenden Sie Map in ViewPager von Android
So zeigen Sie Hello World in Python an
Lesen von CSV-Dateien mit Pandas
So ändern Sie die Editorfarbe in PyCharm
Wie schreibe ich diesen Prozess in Perl?