在 Django REST 控件序列化程序中不会自动删除空格?
In Django REST control serializer does not automatically remove spaces?
model.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'}
于是数据库中的空格就消失了。
如何保留空格?
您可以通过实施方法 to_representation()
自定义该字段的输出
trim_whitespace
- If set to True then leading and trailing whitespace is trimmed. Defaults to True.
所以需要自己将这个flag传给serializer字段,设置为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 仍会从模型中正确选取其他属性。
您可以使用 django-rest-framework 序列化程序中提供的 trim_whitespace 选项。
class MessageSerializer(serializers.ModelSerializer):
content = serializers.CharField(max_length=1024, trim_whitespace=True)
class Meta:
model = Msg
fields = ["content"]
model.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'}
于是数据库中的空格就消失了。
如何保留空格?
您可以通过实施方法 to_representation()
自定义该字段的输出
trim_whitespace
- If set to True then leading and trailing whitespace is trimmed. Defaults to True.
所以需要自己将这个flag传给serializer字段,设置为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 仍会从模型中正确选取其他属性。
您可以使用 django-rest-framework 序列化程序中提供的 trim_whitespace 选项。
class MessageSerializer(serializers.ModelSerializer):
content = serializers.CharField(max_length=1024, trim_whitespace=True)
class Meta:
model = Msg
fields = ["content"]