Pydantic : transmettre l'intégralité de l'ensemble de données au champ imbriqué

王林
Libérer: 2024-02-05 21:24:12
avant
571 Les gens l'ont consulté

Pydantic : transmettre lintégralité de lensemble de données au champ imbriqué

Contenu de la question

J'utilise Django, le framework Django-ninja pour remplacer certaines de mes API (écrites en drf car il devient davantage une base de code passe-partout). Désormais, lors de la conversion de certaines API héritées, je dois suivre l'ancienne structure afin que les clients ne rencontrent aucun problème. Ce n’est qu’une histoire.

J'ai deux modèles distincts.

class author(models.model):
   username = models.charfield(...)
   email = models.charfield(...)
   ... # other fields

class blog(models.model):
   title = models.charfield(...)
   text = models.charfield(...)
   tags = models.charfield(...)
   author = models.foreignkey(...)
   ... # other fields
Copier après la connexion

Structure écrite par le sérialiseur Django Rest Framework

class blogbaseserializer(serializers.serializer):
   class meta:
       model = blog
       exclude = ["author"]

class authorserializer(serializers.serializer):
   class meta:
       model = author
       fields = "__all__"


class blogserializer(serializers.serializer):
   blog = blogbaseserializer(source="*")
   author = authorserializer()
Copier après la connexion

Dans l'ensemble de vues, l'ensemble de requêtes suivant sera transmis

class blogviewset(viewsets.genericviewset, listviewmixin):
    queryset = blog.objects.all()
    serializer_class = blogserializer
    ... # other config
Copier après la connexion

Ainsi, lorsque je suis passé à Django-Ninja, il utilise pydantic pour la génération de schémas. J'ai le code de modèle pydantique suivant

AuthorSchema = create_schema(Author, exclude=["updated", "date_joined"])


class BlogBaseSchema(ModelSchema):
    class Meta:
        model = Blog
        exclude = ["author", ]


class BlogSchema(Schema):
    blog: BlogBaseSchema
    author: AuthorSchema
Copier après la connexion

Mais comme vous pouvez le voir, le sérialiseur drf a un paramètre appelé source的参数,其中source="*" qui signifie transmettre l'intégralité de l'ensemble de données d'origine au sérialiseur de champs imbriqués. Existe-t-il des options pour faire exactement la même chose avec pydantic ?

En plus de créer une liste de dictionnaires pour les blogs dans l'ensemble de requêtes [{author : blog.author, "blog": blog}]


Réponse correcte


L'utilisation du code suivant a résolu le problème

class AuthorSchema(ModelSchema):
    class Meta:
        model = Author
        exclude=["updated", "date_joined"]

class BlogBaseSchema(ModelSchema):
    class Meta:
        model = Blog
        exclude = ["author", ]


class BlogSchema(Schema):
    blog: BlogBaseSchema
    author: AuthorSchema

    @staticmethod
    def resolve_blog(self, obj):
        return obj
Copier après la connexion

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:stackoverflow.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal