是否可以在序列化程序中将必填字段设置为列表? 我不想用每行中的类型覆盖每个字段,如下所示:
name = serializers.CharField(required=True)
description = serializers.CharField(required=True)
date_start = serializers.DateTimeField(required=True)
date_end = serializers.DateTimeField(required=True)
我只想列举字段的名称
class CampaignStepFirstSerializer(serializers.ModelSerializer):
class Meta:
model = Campaign
fields = (
'name',
'description',
'date_start',
'date_end',
)
required_fields = fields
在DRF中没有这样的选项。使用
Meta
可以得到的最接近的是extra_kwargs
(假设您使用的是serializers.ModelSerializer
),分别提到字段名,值是带有{'required': True}
的dict。但这比在初始化字段时显式地提到required=True
要复杂得多。你知道吗只需对
serializers.Serializers
的get_fields
方法和任何子类(例如serializers.ModelSerializer
)进行一点扩展,就可以得到您想要的:如图所示,在serializer类的
Meta
类中,您可以定义required_fields
选项,如果这些字段不是read_only
并且没有默认值,则这些字段将变为required
。你知道吗需要注意的一点是,如果在序列化程序上用} is defined such that the initial arguments used in the creation of a field are shown as-is 。构造函数(
required=False
显式定义了某个字段,并且在Meta.required_fields
中提到了该字段,__repr__
将显示required=False
(例如,当您检查<serializer_instance>.fields
)。^{Field.__new__
)保留一个_kwargs
属性以保留初始参数。你知道吗这适用于所有显式声明的字段(元类
serializers.SerailizerMetaclass
在序列化程序类上设置_declared_fields
属性),因此使用read_only_fields
/write_only_fields
/extra_kwargs
Meta
选项也不会影响表示。你知道吗如果需要,可以重写该字段的
__repr__
来更改此项,但我认为不应该这样做,因为这样会破坏与其他设计的一致性。你知道吗相关问题 更多 >
编程相关推荐