在序列化程序中将继承字段更改为必需
Posted
技术标签:
【中文标题】在序列化程序中将继承字段更改为必需【英文标题】:Change inherit field to required in a Serializer 【发布时间】:2022-01-22 08:50:30 【问题描述】:我有一个这样的序列化器:
from rest_framework import serializers
class MySerializer(serializers.Serializer):
field1 = serializers.CharField(required=False)
field2 = serializers.IntegerField(required=False)
field3 = serializers.BooleanField(required=False)
...
我想继承这个类,但是把field1
改成required=True
,我该怎么做?
我知道我可以像这样重新定义字段:
class MySerializer2(MySerializer):
field1 = serializers.CharField(required=True)
但我不喜欢这样做。
【问题讨论】:
你为什么不想按照你的建议去做? @shivankgtm 我的字段还有其他参数,例如help_text
、default
等,我不想重新定义它。
【参考方案1】:
我现在解决这个问题的更好方法是更改序列化器__init__
上的字段属性:
class MySerializer(serializers.Serializer):
field1 = serializers.CharField(required=False)
field2 = serializers.IntegerField(required=False)
field3 = serializers.BooleanField(required=False)
...
def __init__(self, instance=None, **kwargs):
super().__init__(instance=instance, data=data, **kwargs)
if hasattr(self,'update_fields'):
to_update= self.update_fields
for field in to_update:
for attr, value in to_update[field].items():
setattr(self.fields[field], attr, value)
现在我只需要将update_fields
属性设置为我要修改的字段和属性,
class MySerializer2(MySerializer):
update_fields =
'field1': 'required':True,
'field2': 'help_text': 'New help text',
【讨论】:
以上是关于在序列化程序中将继承字段更改为必需的主要内容,如果未能解决你的问题,请参考以下文章
Django REST Framework 序列化程序字段必需=false
在 VB6 中将 DAO DBEngine DataTable 的列从 DataType dbInteger 更改为 dbLong
在.net core 的webapi项目中将对象序列化成json