DRF ListSerializer 和 ListField

2024-01-28

我在我的项目中使用 django rest,到目前为止我使用的对象列表列表序列化器 http://www.django-rest-framework.org/api-guide/serializers/#listserializer,当我需要列表的最小长度和最大长度时,我用谷歌搜索并达到了列表字段 http://www.django-rest-framework.org/api-guide/fields/#listfield.

在此之前,我的代码运行良好,没有任何错误和不当行为。现在我使用 ListField 作为列表字段序列化器,但我不知道何时使用 ListSerializer?有人可以解释 ListSerializer 和 FieldSerializer 之间的区别吗?

我使用 ListSerializer 的示例代码:

tags = serializers.ListSerializer(child=serializers.CharField(allow_blank=False), required=False)

我的 ListField 示例代码:

open_hour = serializers.ListField(child=serializers.DictField(), max_length=7, min_length=7)

免责声明: 这个答案是不完整

有人可以解释一下 ListSerializer 和 ListSerializer 之间的区别吗 字段序列化器?

我假设问题是之间的区别serializers.ListSerializer and serializers.ListField

假设我们有两个models as

class Musician(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    instrument = models.CharField(max_length=100)

    def __str__(self):
        return f'{self.first_name} {self.last_name}'


class Album(models.Model):
    artist = models.ForeignKey(Musician, on_delete=models.CASCADE)
    name = models.CharField(max_length=100)
    release_date = models.DateField()
    num_stars = models.IntegerField()

    def __str__(self):
        return f'{self.name} : {self.artist}'

and serializer as

class AlbumSerializer(serializers.ModelSerializer):
    artist = serializers.StringRelatedField()

    class Meta:
        fields = '__all__'
        model = Album


class MusicianSerializer(serializers.ModelSerializer):
    AlbumSerializer(many=True, source='album_set')

    class Meta:
        fields = '__all__'
        model = Musician



列表序列化器
正如官方所说DRF doc http://www.django-rest-framework.org/api-guide/serializers/#listserializer

当序列化器被实例化并且many=True通过了,一个 将创建 ListSerializer 实例。然后是序列化器类 成为一个child父 ListSerializer 的

例如,我们可以重写MusicianSerializer with ListSerializer as

class MusicianSerializer(serializers.ModelSerializer):
    albums = serializers.ListSerializer(child=AlbumSerializer(), source='album_set')

    class Meta:
        fields = '__all__'
        model = Musician

它会产生与以前相同的结果。但是,如果我们尝试使用ListField代替ListSerializer它会引发错误

'RelatedManager' object is not iterable


当我检查源代码时,我发现两者ListSerializer and ListField从同一个类继承(父母和祖父母相同)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DRF ListSerializer 和 ListField 的相关文章

  • Daphne Django 文件上传大小限制

    我使用 Daphne 进行套接字和 http 连接 我正在运行 4 个工作容器 并且现在在 docker 容器中本地运行所有内容 如果我尝试上传 400MB 的文件 我的 daphne 服务器会失败 它适用于最大 15MB 的小文件 我的
  • C# 反序列化过程中创建指向父对象的指针

    我有这样的课程 Serializable public class child public Parent parent Serializable public class Parent public List
  • Python用Django请求Post请求数据

    我正在尝试向一个非常简单的 django 服务器发送一个简单的 post 请求 但无法理解为什么 post 数据没有出现在 requests post 字典中 而是出现在请求正文中 客户端代码 payload test test heade
  • 使用 kryo 注册课程的策略

    我最近发现了 kryonet 库 它非常棒并且非常适合我的需求 然而 我遇到的一个问题是制定一种好的策略来注册所有可以转移的类 我知道我可以在每个对象中编写一个静态方法 该方法将返回它使用的所有类的列表 但我真的不想这样做 为了我自己的时间
  • 我应该在什么模型中添加ManyToManyField?

    我读了有关多对多关系的文档 https docs djangoproject com en dev ref models fields ref manytomany和examples https docs djangoproject com
  • 在 Django shell 会话期间获取 SQL 查询计数

    有没有办法打印 Django ORM 在 Django shell 会话期间执行的原始 SQL 查询的数量 Django 调试工具栏已经提供了此类信息 例如 5 QUERIES in 5 83MS但如何从 shell 中获取它并不明显 您可
  • 没有 Neo4Django 的 Django 和 Neo4j

    我正在使用 Neo4j 以及 Postgres 构建一个 Django 应用程序 我发现这个 Django 集成称为新4django https github com scholrly neo4django 我想知道是否可以只使用neo4r
  • 如何添加身份验证中间件 JWT django?

    我正在尝试创建一个中间件来使用 JWT 进行身份验证 但在视图中 request user 始终是 AnonymUser 当我验证中间件通过用户模型更改 request user 时 确实如此 但在到达视图时 由于某种原因 request
  • Django LoginForm 中间件打破了基于类的视图

    据几其他答案 https stackoverflow com questions 2734055 putting a django login form on every page 我使用中间件在项目的每个页面上显示登录表单 以便用户可以就
  • Django 营业时间

    我想添加诊所的营业时间 我已经对此进行了调查在 Django 中实现 开放时间 的任何现有解决方案 https stackoverflow com questions 8128143 any existing solution to imp
  • 在 ubuntu 中卸载 python 模块

    我必须删除一个名为 django 的 python 模块 一种流行的模块 因为我安装了错误的版本 1 3 py 2 6 中的 beta 如何卸载这个模块 请解释一下 因为我只在 Windows 中使用过 python 而从未在 Ubuntu
  • 在一个视图中使用两个模板

    我尝试以两种方式呈现视图中的内容 html 和 csv 下载 我能够做到这一点的唯一方法是使用两种不同的视图 一种用于 html 演示 一种用于 csv 这重复了我的代码 我正在寻找更优雅的解决方案 有什么建议么 这是示例代码 views
  • Django admin:通过 URL 传递变量

    我想通过 URL 将变量传递到 django admin 中的另一个页面 看起来它不起作用 我想传递变量 name hello 并通过request GET get name 捕获它 但是url变成 e 1 经过之后 如果我使用默认参数 q
  • Pinax:自定义注册和个人资料

    我想在用户注册时收集更多信息 并将其显示为个人资料信息的一部分 以便用户在创建登录后可以对其进行编辑 如何在不直接更改 pinax 代码的情况下扩展注册和个人资料表单和模型 来自 松树docs http pinaxproject com d
  • Django 模板 - 我可以设置要在父模板中使用的变量吗?

    我有一个包含通用导航菜单的父模板 我希望能够添加class selected 到适当的菜单选项 我希望能够在子模板中设置变量 例如 set menu products and do ifequal menu products class s
  • 以敏捷/BDD 方式在 Django 中使用 Doctests 的示例

    我有兴趣学习如何以更敏捷 BDD 的方式进行文档测试和单元测试 我发现了一些看似合理的教程 但它们只是缩略图 我真正想看到的是一些采用 BDD 风格开发的 Django 项目的源代码 我不清楚的是如何处理请求对象等 我遇到过这样的情况 我已
  • JSON(Gson)反序列化为超类对象然后转换为子类对象的最佳方法是什么

    我目前正在研究在Android上使用Gson for Json 刚刚遇到这个问题 假设我们有如下类 class Command public int id COMMAND ID UNSPECIFIED class CommandSpecif
  • 具有内联模型的 Django 管理页面加载速度非常慢

    我有一个带有单个内联模型的模型的 Django 管理页面 当内联模型有很多项目 例如 75 个 时 页面加载速度非常慢 大约 30 秒 即使我排除内联模型上的所有字段 让它只渲染名称 情况也是如此 删除内联模型会导致页面加载速度非常快 以秒
  • Django Rest Framework 序列化器中的聚合(和其他带注释的)字段

    我正在尝试找出添加带注释字段的最佳方法 例如将任何聚合 计算 字段添加到 DRF 模型 序列化器 我的用例只是一种情况 端点返回的字段未存储在数据库中 而是从数据库计算得出 让我们看下面的例子 模型 py class IceCreamCom
  • django ajax post 403被禁止

    使用 django 1 4 当我尝试从我的 javascript 做我的 django 服务器上的帖子时 我收到 403 错误 我的 get 工作正常 尽管问题仅出在帖子上 也尝试过 csrf exempt但没有运气 更新 我现在可以发布我

随机推荐