[PYTHON] Holen Sie sich ein Referenzmodell mit Django Serializer

Einfach gesagt, Serializer!

Konvertiert Modellobjekte in JSON!

Na dann Diesmal beim Abrufen des Book-Objekts Holen Sie sich den Autor, auf den ForeignKey verweist, einschließlich des Objekts !!!!!!!!!!!!

Modell definieren

Dies ist ein Beispielmodell! Das "Buch" -Modell bezieht sich auf das "Autoren" -Modell!

models.py


class AbstractModel(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    is_deleted = models.CharField(max_length=1, default='0')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        abstract = True

class Author(AbstractModel):
    first_name = models.CharField(max_length=128)
    last_name = models.CharField(max_length=128)

class Book(AbstractModel):
    title = models.CharField(max_length=128)]
    sub_title = models.CharField(max_length=128)]
    price = models.DecimalField(max_digits=8, decimal_places=2, blank=True, null=True)
    author = models.ForeignKey(Author, on_delete=models.PROTECT, blank=True, null=True)

Holen Sie sich auch das Referrer-Modell

Ansicht definieren

Erstellen Sie eine get-API mit dem generischen ListAPIView! Da auch das "Autor" -Modell erworben wird, wird das Abfrageset Geben Sie den Autor in select_related an. Es ist möglich, es zu bekommen, weil es "all ()" ist, aber "select_related. (" Author ")" Durch vorherige Angabe können Sie die Menge an SQL reduzieren, die ausgegeben werden soll !!

views.py


from django_filters import rest_framework as filters
from rest_framework import generics

from book.models import Book, Author
from book.serializers import BookSerializer

class ListBook(generics.ListAPIView):
    """API, um eine Liste der Bücher zu erhalten"""
    queryset = Book.objects.select_related('author')
    serializer_class = BookSerializer
    filter_backends = [filters.DjangoFilterBackend]
    filterset_fields = '__all__'

Definieren Sie den Referrer Serializer in Serializer

Sie können einen Ziel-Serializer im Feld "BookSerializer" definieren! Jetzt können Sie auch das verwandte Modell bekommen !!!

Eine Sache, die hier zu beachten ist, ist jedoch der Serializer, der die Referenzquelle ist. Bei der Definition bezieht sich der Feldname auf Lookup. Machen Sie also keinen Fehler Bitte !!

serializer.py


class AuthorSerializer(serializers.ModelSerializer):
    class Meta:
        model = Author
        fields = '__all__'


class BookSerializer(serializers.ModelSerializer):
    author = AuthorSerializer()
    class Meta:
        model = Book
        fields = '__all__'

Das Ergebnis ist da !!!!

Im Ausgabeergebnis werden auch die im Beispielmodell ausgelassenen Daten ausgegeben !! Bitte überspringen Sie es!

スクリーンショット 2020-10-22 3.59.33.png

Holen Sie sich das referenzierte Modell

Zuvor habe ich auch das Buchmodell und das referenzierende "Autoren" -Modell erhalten. Im Gegenteil, ich möchte "Buch" vom "Autor" bekommen !!. Die Methode ist einfach!

Ansicht definieren

Ich möchte es mit ListAPIView bekommen. Dieses Mal können Sie einfach "all ()" ohne "select_related" verwenden.

views.py


class ListAuthor(generics.ListAPIView):
    """Autor holen"""
    queryset = Author.objects.all()
    serializer_class = AuthorBookSerializer
    filter_backends = [filters.DjangoFilterBackend]
    filterset_fields = '__all__'

Serializer-Definition

Es ist book_set, um das referenzierte Modell zu erhalten! Wenn Sie jetzt die API anfordern, können Sie den Autor und das Buch abrufen. Wenn Sie zu diesem Zeitpunkt "author = AuthorSerializer ()" in "BookSerializer" belassen Beachten Sie, dass Sie den "Autor" erneut erhalten, wenn Sie das "Buch" erhalten.

serializers.py


class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = '__all__'


class AuthorBookSerializer(serializers.ModelSerializer):
    book_set = BookSerializer(many=True)
    class Meta:
        model = Author
        fields = '__all__'

Das Ergebnis ist da !!!!

スクリーンショット 2020-10-22 3.51.45.png

Das ist es!

Recommended Posts

Holen Sie sich ein Referenzmodell mit Django Serializer
Erstellen eines Lernmodells mit MNIST
Entwicklung einer WEB-Anwendung mit Django [Modelldefinition]
Implementieren Sie ein benutzerdefiniertes Benutzermodell in Django
Django-Modell: ManyToManyField
Wenn Sie den Wert mithilfe von Auswahlmöglichkeiten in der Vorlage im Django-Modell anzeigen möchten
Erstellen einer interaktiven Anwendung mithilfe eines Themenmodells
Führen Sie Python-Dateien mit Django aus HTML aus
[Python] Implementierung von Clustering mit einem gemischten Gaußschen Modell
Erstellen einer Django-Entwicklungsumgebung mit pyenv-virtualenv auf einem Mac
So erhalten Sie mehrere Modellobjekte zufällig in Django
Abrufen des Dateinamens in einem Ordner mithilfe von glob
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 1 ~
Erstellen eines seq2seq-Modells mithilfe der Funktions-API-Übersicht von keras
Ich habe versucht, ein Beispielmodell von Pytorch mit TorchServe zu hosten
DJango Hinweis: Von Anfang an (mit einer generischen Ansicht)
Erstellen Sie eine virtuelle Python-Umgebung mit venv (Django + MySQL ①)
Machen Sie das Modell zu einer Zeichenfolge in der Django-HTML-Vorlage
Maschinelles Lernen mit Bildern der Kategorie Caffe -1 unter Verwendung eines Referenzmodells
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 2 ~
Erstellen eines seq2seq-Modells unter Verwendung der funktionalen API-Inferenz von keras
So verweisen Sie auf statische Dateien in einem Django-Projekt
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 3 ~
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 4 ~
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 5 ~
[Django] Geben Sie Form einen dynamischen Anfangswert aus Model
Erstellen Sie einen Django-Zeitplan
Modelländerungen in Django
Hochleistungs-Django - Modell
Starten Sie ein Django-Projekt
Implementierung von VGG16 mit Keras, die ohne Verwendung eines trainierten Modells erstellt wurden
Erstellen Sie eine Shogi Score Management App mit Django 4 ~ Create View ~
[Django] Verwalten Sie Einstellungen wie das Schreiben in settings.py mit einem Modell
Erstellen Sie ein seq2seq-Modell mit dem Functional API Model Building & Learning von keras
Die Geschichte des Django-Modellfeldes verschwindet aus der Klasse
Ich habe versucht, ein Deep-Learning-Modell von TensorFlow mit TensorFlow Serving zu hosten
So generieren Sie eine Abfrage mit dem IN-Operator in Django
[Django] Erstellen Sie ein Modell, das für Telefonnummer / Postleitzahl geeignet ist
Ich habe ein VGG16-Modell mit TensorFlow gemacht (unterwegs)
Versuchen Sie, eine multimodale Verteilung mithilfe des EM-Algorithmus zu modellieren
Erstellen Sie mit Django ein benutzerfreundliches Folgemodell mit ManyToManyField through
[Django lernt mit der Klinge des Teufels] So erhalten Sie einen Abfragesatz für die Vorwärts- / Rückwärtsreferenz