Django中DataclassSerializer空字符串序列化验证失败问题
解决DRF数据类序列化器允许空字符串的问题
默认情况下,DRF的DataclassSerializer会把数据类里的str类型字段映射为DRF的CharField,而CharField默认不允许空字符串(blank=False),这就是传入{'string_field': ''}时验证失败的原因。
要在保留数据类实现的前提下解决这个问题,可以通过dataclasses.field的metadata参数,给DRF的字段传递配置:
from dataclasses import dataclass, field from rest_framework_dataclasses.serializers import DataclassSerializer @dataclass class Foo: # 通过metadata告诉DRF该字段允许空字符串 string_field: str = field(metadata={'blank': True}) class FooSerializer(DataclassSerializer): class Meta: dataclass = Foo
这样修改后,序列化器会识别metadata中的blank=True配置,允许string_field接收空字符串,全程不需要在序列化器里单独声明字段,完全保留数据类的实现方式。
如果还需要允许字段为None(对应数据库的null值),可以在metadata里再加'null': True:
string_field: str = field(metadata={'blank': True, 'null': True})
内容的提问来源于stack exchange,提问作者Bugya
相关产品推荐
相关产品推荐

