当前位置: 首页 > 面试题库 >

Django REST Framework-序列化可选字段

戚澄邈
2023-03-14
问题内容

我有一个具有可选字段的对象。我以这种方式定义了我的序列化器:

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

我认为
required=False如果不存在,可以绕过该字段。但是,在文档中提到这会影响反序列化而不是序列化。

我收到以下错误:

'Product' object has no attribute 'Classification'

当我尝试访问.data序列化实例时,这正在发生。(这是否意味着反序列化导致了这一问题?)

对于没有的实例会发生这种情况Classification。如果我Classification从序列化程序类中忽略它,则可以正常工作。

如何正确执行此操作?即,使用可选字段序列化对象。


问题答案:

序列化程序是经过精心设计的,以使用一组固定的字段,因此,您将无法轻易地选择性地删除其中一个键。

您可以使用SerializerMethodField返回字段值,或者None如果该字段不存在,或者根本不能使用序列化器,只需编写一个视图即可直接返回响应。

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



 类似资料:
  • Jackson版本:2.10.1 谢谢你的回答!

  • 如果我有一个模型序列化程序,其中数据库模型中不需要first_name和last_name(blank=True,null=True,default=None),并且我选择提交可能包含或可能不包含“first_name”或“last_name”字段的json数据,那么无论这些字段是否通过json请求提交,这些字段不应该存在于已验证的_数据[]中,因为它们列在序列化程序字段中,并且其默认值设置为无?

  • 我有课 其中field 如果使用ObjectMapper反序列化此对象 结果是这样的: 添加了转义(\),并且json字段有引号(")。如何正确摆脱这一点并制作单个JSON?像这样:

  • 考虑以下代码: 现在扩展了一个实现接口的类。类和是带有一堆getter和setter的POJOS。FindBugs抱怨和字段说: 这个Serializable类定义了一个非基元实例字段,它既不是瞬态的、Serializable的,也不java.lang.Object的,并且似乎没有实现Externalizable接口或readObject()和WriteObject()方法。 好吧,所以一切都很好

  • 我有一个没有扩展可串行化或可外部化接口的类,但在netbeans中使用FindBugs时仍然会遇到错误。有人能告诉我如何解决这个问题吗? 这是我的课 FindBug中的Bug:类分析器定义了一个非瞬时的非序列化实例字段objAnalyzerVar,对于objAnalyzerDataTypeInfo也是如此;

  • 我有一个具有以下属性的对象。 该对象位于库中,我不希望仅为了序列化目的而修改它,并且希望避免创建另一个DTO的成本。 我如何序列化/反序列化可选属性?可选没有默认构造函数(两个apache公共对都没有),但我不能使用InstanceCreator,也不真正了解如何创建一个TypeAdapter,它只会将序列化委托给底层的可选内容。