I am using django, the django-ninja framework to replace some of my apis (written in drf as it becomes more boilerplate Code library). Now, while converting some legacy apis, I need to follow the old structure so that clients don't face any issues. This is just backstory.
I have two separate models.
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
Structure written by 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()
In the viewset, the following queryset will be passed
class blogviewset(viewsets.genericviewset, listviewmixin): queryset = blog.objects.all() serializer_class = blogserializer ... # other config
So, when I switched to django-ninja, it used pydantic for schema generation. I have the following pydantic pattern code
AuthorSchema = create_schema(Author, exclude=["updated", "date_joined"]) class BlogBaseSchema(ModelSchema): class Meta: model = Blog exclude = ["author", ] class BlogSchema(Schema): blog: BlogBaseSchema author: AuthorSchema
But as you can see, the drf serializer has a parameter called source
, where source="*"
means passing the entire original data set to the embedded Set of field serializers. Are there any options to do the exact same thing with pydantic?
In addition to creating a dictionary list for the blogs in the query set [{author: blog.author, "blog": blog}]
Use the following code solved the problem
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
The above is the detailed content of Pydantic: Pass entire dataset to nested field. For more information, please follow other related articles on the PHP Chinese website!