[PYTHON] Obtenir un modèle de référence à l'aide de Django Serializer

Pour faire simple, Serializer!

Convertit les objets de modèle en JSON!

Eh bien Cette fois, lors de l'obtention de l'objet Livre Obtenez l'auteur référencé par ForeignKey, y compris l'objet !!!!!!!!!!!!

Définir le modèle

Ceci est un exemple de modèle! Le modèle Book fait référence au modèle ʻAuthor`!

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)

Obtenez également le modèle de référence

Définir la vue

Créez une API get en utilisant les génériques ListAPIView! Le modèle ʻAuthorest également acquis, donc queryset Spécifiez l'auteur dansselect_related. Il est possible de l'obtenir car c'est ʻall () , maisselect_related. ('Author') En spécifiant à l'avance, vous pouvez réduire la quantité de SQL à émettre !!

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 pour obtenir une liste de livres"""
    queryset = Book.objects.select_related('author')
    serializer_class = BookSerializer
    filter_backends = [filters.DjangoFilterBackend]
    filterset_fields = '__all__'

Définir le sérialiseur référent dans le sérialiseur

Vous pouvez définir un sérialiseur de destination dans le champ BookSerializer! Maintenant, vous pouvez également obtenir le modèle associé !!!

Cependant, une chose à noter ici est le sérialiseur qui est la source de référence. Lors de la définition, le nom du champ est lié à lookup donc ne faites pas d'erreur S'il vous plaît !!

serializer.py


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


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

Le résultat est là !!!!

Dans le résultat de sortie, les données omises dans l'exemple de modèle sont également sorties !! Veuillez le sauter !!

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

Obtenez le modèle référencé

Auparavant, j'avais également le modèle Book et le modèle référent ʻAuthor, Au contraire, je voudrais obtenir Book de ʻAuthor !!. la méthode est simple!

Définir la vue

Je voudrais l'obtenir en utilisant ListAPIView. Cette fois, il n'y a aucun problème avec ʻall () car il est sans select_related`.

views.py


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

Définition du sérialiseur

C'est book_set pour obtenir le modèle référencé! Maintenant, lorsque vous demandez l'API, vous pouvez obtenir l'auteur et le livre. À ce stade, si vous laissez ʻauthor = AuthorSerializer () dans BookSerializer` Notez que lorsque vous obtenez le «livre», vous récupérez à nouveau «l'auteur».

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__'

Le résultat est là !!!!

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

C'est tout!

Recommended Posts

Obtenir un modèle de référence à l'aide de Django Serializer
Créer un modèle d'apprentissage à l'aide de MNIST
Développement d'une application WEB avec Django [Définition de modèle]
Implémenter un modèle utilisateur personnalisé dans Django
Modèle Django: ManyToManyField
Si vous souhaitez afficher la valeur à l'aide des choix du modèle dans le modèle Django
Création d'une application interactive à l'aide d'un modèle de rubrique
Exécutez des fichiers Python à partir de HTML en utilisant Django
[Python] Implémentation du clustering à l'aide d'un modèle gaussien mixte
Créer un environnement de développement Django à l'aide de pyenv-virtualenv sur Mac
Comment obtenir plusieurs objets de modèle au hasard dans Django
Obtenir le nom de fichier dans un dossier à l'aide de glob
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 1 ~
Construire un modèle seq2seq en utilisant la vue d'ensemble de l'API fonctionnelle de Keras
J'ai essayé d'héberger un exemple de modèle de Pytorch en utilisant TorchServe
Remarque DJango: depuis le début (en utilisant une vue générique)
Construire un environnement virtuel Python en utilisant venv (Django + MySQL ①)
Faire du modèle une chaîne sur le modèle HTML Django
Apprentissage automatique avec des images de catégorie Caffe -1 à l'aide du modèle de référence
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 2 ~
Construire un modèle seq2seq à l'aide de l'inférence API fonctionnelle de Keras
Comment référencer des fichiers statiques dans un projet Django
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 3 ~
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 4 ~
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 5 ~
[Django] Donne à Form une valeur initiale dynamique de Model
Créer un planning Django
Modifications du modèle dans Django
Django haute performance - Modèle
Démarrer un projet Django
Implémentation de VGG16 à l'aide de Keras créé sans utiliser de modèle entraîné
Créez une application de gestion de partition shogi à l'aide de Django 4 ~ Créer une vue ~
[Django] Gérez les paramètres comme l'écriture dans settings.py avec un modèle
Construire un modèle seq2seq en utilisant la création et l'apprentissage du modèle d'API fonctionnelle de Keras
L'histoire du champ de modèle Django disparaissant de la classe
J'ai essayé d'héberger un modèle d'apprentissage en profondeur de TensorFlow à l'aide de TensorFlow Serving
Comment générer une requête à l'aide de l'opérateur IN dans Django
[Django] Créez un modèle adapté au numéro de téléphone / code postal
J'ai fait un modèle VGG16 en utilisant TensorFlow (en chemin)
Essayez de modéliser une distribution multimodale à l'aide de l'algorithme EM
Créez un modèle de suivi facile à utiliser avec Django en utilisant ManyToManyField via
[Apprentissage de Django avec la lame du diable] Comment obtenir un ensemble de requêtes pour une référence avant / arrière