我有一个具有可选字段的对象.我这样定义了我的串行化程序:

class ProductSerializer(serializers.Serializer):
    code = serializers.Field(source="Code")
    classification = serializers.CharField(source="Classification", required=False)

如果这个字段不存在,I thought required=False会做绕过它的工作.但是,文档中提到这会影响反序列化,而不是序列化.

我发现以下错误:

'Product' object has no attribute 'Classification'

当我try 访问.data个序列化实例时就会发生这种情况.(这不意味着是反序列化引发了这一问题吗?)

对于没有Classification个的实例,会发生这种情况.如果我在序列化程序类中省略了Classification,那么它就可以正常工作.

我怎样才能正确地做到这一点呢?即,使用可选字段序列化对象.

推荐答案

序列化程序被特意设计为使用一组固定的字段,这样您就不容易有 Select 地删除其中一个键.

您可以使用SerializerMethodField返回字段值,或者使用None(如果字段不存在),或者根本不使用序列化程序,只编写一个直接返回响应的视图.

Update for REST framework 3.0 serializer.fields可以在实例化的串行化器上修改.当需要动态序列化程序类时,我可能会建议更改自定义Serializer.__init__()方法中的字段.

Django相关问答推荐

查询在对象中使用django查询与一个包含句子

Django 5.0.2:TypeError:获取切片后无法过滤查询

构造一个定制字符串(实体、年份和字母数字的组合)作为Django中的Postgres数据库的主键是否明智?

Django和静态文件

如何在Django中显示多个相关对象

Django 隐藏特定人员的媒体文件链接

DjangoAdmin与外部数据库的模型无法保存或过滤

DjangoRestFramework 解析错误:"多部分表单解析错误多部分中的无效边界:None"

DJANGO 获得模型中发现的第一、第二和第三大价值

Django 注释(),计数()

Django AWS S3对象存储boto3媒体上传报错

Django 关系嵌套related_name

为什么 django 1.7 会为字段 Select 的变化创建迁移?

Django App 配置不当 - 应用程序模块有多个文件系统位置

Django BigInteger自动增量字段作为主键?

创建新内容类型时出错.请确保在try 单独迁移应用程序之前迁移内容类型

import_module 的 Django 1.9 ImportError

如何在字段集中显示 Django 管理内联模型?

模型表格Save保存,Get获取保存的对象

Python/Django - 避免在源代码中保存密码