我正在使用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}]

推荐答案

使用以下代码解决了该问题

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

Python相关问答推荐

在Arrow上迭代的快速方法.Julia中包含3000万行和25列的表

如何将桌子刮成带有Se的筷子/要求/Beautiful Soup ?

使用多个性能指标执行循环特征消除

DuckDB将蜂巢分区插入拼花文件

将整组数组拆分为最小值与最大值之和的子数组

未删除映射表的行

运行Python脚本时,用作命令行参数的SON文本

' osmnx.shortest_track '返回有效源 node 和目标 node 的'无'

使用setuptools pyproject.toml和自定义目录树构建PyPi包

如何在python polars中停止otherate(),当使用when()表达式时?

Python中绕y轴曲线的旋转

我对我应该做什么以及我如何做感到困惑'

如何设置视频语言时上传到YouTube与Python API客户端

从spaCy的句子中提取日期

在ubuntu上安装dlib时出错

根据列值添加时区

如何创建引用列表并分配值的Systemrame列

如何将相同组的值添加到嵌套的Pandas Maprame的倒数第二个索引级别

如果不使用. to_list()[0],我如何从一个pandas DataFrame中获取一个值?

为什么我只用exec()函数运行了一次文件,而Python却运行了两次?