如下图,在定义序列化器的元类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:
以上的视图部分: