在 Django REST 控件序列化程序中不会自动删除空格?
Posted
技术标签:
【中文标题】在 Django REST 控件序列化程序中不会自动删除空格?【英文标题】:In Django REST control serializer does not automatically remove spaces? 【发布时间】:2018-10-05 17:42:34 【问题描述】:模型.py
class Msg(models.Model):
content = models.CharField(max_length=1024, null=True)
serializer.py
class MessageSerializer(serializers.ModelSerializer):
class Meta:
model = Msg
fields = ["content"]
有数据:
"content": " space test "
和
print(data)
serializer = MessageSerializer(data=data)
if serializer.is_valid():
serializer.save()
print(serializer.data)
return True, serializer.data
else:
return False, serializer.errors
第一次打印是
'content': ' space test '
第二个打印是
'content': 'space test'
所以数据库中的空格消失了。
如何保留空格?
【问题讨论】:
请删除所有反引号 【参考方案1】:来自DRF docs on CharField:
trim_whitespace
- 如果设置为 True,则会修剪前导和尾随空格。默认为真。
所以你需要自己将这个标志传递给序列化器字段,并将其设置为False
:
class MessageSerializer(serializers.ModelSerializer):
content = serializers.CharField(trim_whitespace=False, max_length=1024)
class Meta:
model = Msg
fields = ["content"]
或更好地通过additional keyword arguments:
class MessageSerializer(serializers.ModelSerializer):
class Meta:
model = Msg
fields = ["content"]
extra_kwargs = "content": "trim_whitespace": False
第二个变体更好,因为 DRF 仍然可以从模型中正确提取其他属性。
【讨论】:
【参考方案2】:您可以通过实现 to_representation() 方法来自定义该字段的输出
【讨论】:
【参考方案3】:您可以使用 django-rest-framework 序列化程序中给出的 trim_whitespace 选项。
class MessageSerializer(serializers.ModelSerializer):
content = serializers.CharField(max_length=1024, trim_whitespace=True)
class Meta:
model = Msg
fields = ["content"]
【讨论】:
以上是关于在 Django REST 控件序列化程序中不会自动删除空格?的主要内容,如果未能解决你的问题,请参考以下文章
序列化程序中的django rest框架更新方法,实例不会立即保存
从 django rest 框架中的序列化程序发送自定义错误响应?
Django Rest Framework 序列化程序中的自定义错误消息