Heim >Backend-Entwicklung >Python-Tutorial >Pydantic: Übergeben Sie den gesamten Datensatz an ein verschachteltes Feld
Ich verwende Django, das Django-Ninja-Framework, um einige meiner APIs zu ersetzen (in DRF geschrieben, da es eher zu einer Standardcodebasis wird). Jetzt muss ich bei der Konvertierung einiger älterer APIs der alten Struktur folgen, damit Kunden keine Probleme haben. Das ist nur eine Hintergrundgeschichte.
Ich habe zwei separate Modelle.
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
Struktur geschrieben vom Django Rest Framework Serializer
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()
Im Viewset wird das folgende Abfrageset übergeben
class blogviewset(viewsets.genericviewset, listviewmixin): queryset = blog.objects.all() serializer_class = blogserializer ... # other config
Als ich also zu Django-Ninja wechselte, verwendete es Pydantic für die Schemagenerierung. Ich habe den folgenden pydantischen Mustercode
AuthorSchema = create_schema(Author, exclude=["updated", "date_joined"]) class BlogBaseSchema(ModelSchema): class Meta: model = Blog exclude = ["author", ] class BlogSchema(Schema): blog: BlogBaseSchema author: AuthorSchema
Aber wie Sie sehen können, verfügt der DRF-Serializer über einen Parameter namens source
的参数,其中source="*"
, der bedeutet, dass der gesamte Originaldatensatz an den Serializer für verschachtelte Felder übergeben wird. Gibt es Möglichkeiten, mit Pydantic genau das Gleiche zu tun?
Zusätzlich zum Erstellen einer Wörterbuchliste für die Blogs im Abfragesatz [{author: blog.author, "blog": blog}]
Die Verwendung des folgenden Codes hat das Problem gelöst
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
Das obige ist der detaillierte Inhalt vonPydantic: Übergeben Sie den gesamten Datensatz an ein verschachteltes Feld. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!