DRF 中没有这样的选项。与Meta 最接近的是extra_kwargs(假设您使用的是serializers.ModelSerializer),分别提及字段名称,值是{'required': True} 的字典。但这比在初始化字段时明确提及required=True 更有效。
你可以通过对serializers.Serializers 的get_fields 方法和任何子类(例如serializers.ModelSerializer)的一点点扩展来获得你想要的:
class CampaignStepFirstSerializer(serializers.ModelSerializer):
def get_fields(self):
fields = super().get_fields()
try:
required_fields = self.Meta.required_fields
except AttributeError:
return fields
if not isinstance(required_fields, (list, tuple)):
raise TypeError(
'The value of `Meta.required_fields` option must be a list or tuple.'
)
for field_name in required_fields:
try:
field = fields[field_name]
except KeyError:
continue
if (
not field.read_only and
field.default is serializers.empty
):
field.required = True
fields[field_name] = field
return fields
class Meta:
model = Campaign
fields = (
'name',
'description',
'date_start',
'date_end',
)
required_fields = fields
如图所示,在序列化程序类的Meta 类中,您可以定义required_fields 选项,如果这些字段不是read_only 并且没有默认值,则这些字段将被设为required。
需要注意的是,如果您在序列化程序上使用required=False 显式定义了某些字段,并且还提到了Meta.required_fields 中的字段,则__repr__ 将显示required=False(例如,当您将检查<serializer_instance>.fields)。 serializers.Field.__repr__ is defined such that the initial arguments used in the creation of a field are shown as-is。构造函数 (Field.__new__) 保留 _kwargs 属性以保留初始参数。
这适用于所有显式声明的字段(元类serializers.SerailizerMetaclass 在序列化程序类上设置_declared_fields 属性),因此使用read_only_fields/write_only_fields/extra_kwargsMeta 选项也不会影响表示。
如果您愿意,您可以覆盖该字段的 __repr__ 来更改此设置,但我认为您不应该这样做,因为这会破坏与其余设计的一致性。