我正在使用django,django-ninja框架来替换我的一些api(用drf编写,因为它越来越像一个样板代码库).现在,在转换一些遗留的api时,我需要遵循旧的 struct ,这样客户端就不会面临任何问题.这只是背景故事.
我有两个不同的型号.
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
用Django REST框架序列化程序编写的 struct
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()
在VIEW SET中,将传递以下查询集
class BlogViewSet(viewsets.GenericViewSet, ListViewMixin):
queryset = Blog.objects.all()
serializer_class = BlogSerializer
... # Other config
因此,当我切换到Django-ninja时,它使用了PYDINGIC来生成模式. 我有以下简单模式的代码
AuthorSchema = create_schema(Author, exclude=["updated", "date_joined"])
class BlogBaseSchema(ModelSchema):
class Meta:
model = Blog
exclude = ["author", ]
class BlogSchema(Schema):
blog: BlogBaseSchema
author: AuthorSchema
但是如您所见,DRF序列化程序有一个名为source
的参数,其中source="*"
表示将整个原始数据集传递给嵌套的字段序列化程序.有没有办法用PYDINIC来做同样的事情?
除了为queryset中的博客创建词典列表[{Author:Bloom.Author,"Blog":Blog}]