zoukankan      html  css  js  c++  java
  • 关于DRF序列化器模型字段参数设置报错AssertionError: May not set both `read_only` and `write_only`

    如下图,在定义序列化器的元类extra_kwargs属性中可以指定模型字段的额外参数,当我指定price字段的write_only=true时,序列化输出给前端的数据中都不会出现price这个字段。

     

    但是当我指定nid字段的write_only=true时,就报错了:

    说不能同时设置read_only 和 write_only为True。这是由于主键nid默认read_only=True,在post新增数据body中可以不用传nid的值,反序列化用不到。

    那怎么让nid主键同时拥有read_only和write_only,在请求中不用传入nid且在响应中不显示nid呢?

    可以通过错误信息重写父类__init__()方法,指定类Field的对象fields的write_only为True:

     这样无论在get或者post都不会显示nid了:

    对于其他字段,如价格,如果想请求的时候不传入价格,则需要指定默认价格不然会报错django.db.utils.IntegrityError: (1048, "Column 'price' cannot be null"),再加上write_only=True使得响应时不显示价格,不用重写init:

     

    以上的视图部分:

  • 相关阅读:
    C# extern关键字的用法
    C#自定义集合类(二)
    C#自定义集合类(一)
    LINQ中交集、并集、差集、去重(十四)
    LINQ中转换操作符(十三)
    Oracle实现连乘和求和
    适配器模式
    HTTP网络协议与手写Web服务容器
    代理模式
    设计模式的几条家规
  • 原文地址:https://www.cnblogs.com/wangyi0419/p/14442532.html
Copyright © 2011-2022 走看看