Rumah >pembangunan bahagian belakang >Tutorial Python >Pydantic: Hantar keseluruhan set data ke medan bersarang
Saya menggunakan django, rangka kerja django-ninja untuk menggantikan beberapa apis saya (ditulis dalam drf kerana ia menjadi lebih kepada asas kod boilerplate). Sekarang, semasa menukar beberapa apis legasi, saya perlu mengikut struktur lama supaya pelanggan tidak menghadapi sebarang masalah. Ini hanya cerita belakang.
Saya ada dua model berasingan.
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 yang ditulis oleh 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()
Dalam set pandangan, set pertanyaan berikut akan diluluskan
class blogviewset(viewsets.genericviewset, listviewmixin): queryset = blog.objects.all() serializer_class = blogserializer ... # other config
Jadi, apabila saya bertukar kepada django-ninja, ia menggunakan pydantic untuk penjanaan skema. Saya mempunyai kod corak pydantic berikut
AuthorSchema = create_schema(Author, exclude=["updated", "date_joined"]) class BlogBaseSchema(ModelSchema): class Meta: model = Blog exclude = ["author", ] class BlogSchema(Schema): blog: BlogBaseSchema author: AuthorSchema
Tetapi seperti yang anda lihat, penyeri penyeri drf mempunyai parameter yang dipanggil source
的参数,其中source="*"
yang bermaksud menghantar keseluruhan set data asal ke penyeri medan bersarang. Adakah terdapat sebarang pilihan untuk melakukan perkara yang sama dengan pydantic?
Selain mencipta senarai kamus untuk blog dalam set pertanyaan [{author: blog.author, "blog": blog}]
Menggunakan kod berikut menyelesaikan masalah
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
Atas ialah kandungan terperinci Pydantic: Hantar keseluruhan set data ke medan bersarang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!