在Django REST控件序列化器不会自动删除空格?

lia*_*eng 8 python django django-models django-serializer django-rest-framework

model.py

class Msg(models.Model):
    content = models.CharField(max_length=1024, null=True)
Run Code Online (Sandbox Code Playgroud)

serializer.py

class MessageSerializer(serializers.ModelSerializer):
    class Meta:
        model = Msg
        fields = ["content"]
Run Code Online (Sandbox Code Playgroud)

有数据:

{"content": "   space    test    "}
Run Code Online (Sandbox Code Playgroud)

print(data)
serializer = MessageSerializer(data=data)
if serializer.is_valid():
    serializer.save()
    print(serializer.data)
    return True, serializer.data
else:
    return False, serializer.errors
Run Code Online (Sandbox Code Playgroud)

第一次打印是 {'content': ' space test '} 第二次打印是 {'content': 'space test'} 因此数据库中的空格消失了.
我该如何保留空间?

Kos*_*Kos 12

来自CharField的DRF文档:

trim_whitespace - 如果设置为True,则修剪前导和尾随空格.默认为True.

因此,您需要自己将此标志传递给序列化程序字段并将其设置为False:

class MessageSerializer(serializers.ModelSerializer):
    content = serializers.CharField(trim_whitespace=False, max_length=1024)
    class Meta:
        model = Msg
        fields = ["content"]
Run Code Online (Sandbox Code Playgroud)

或通过其他关键字参数更好:

class MessageSerializer(serializers.ModelSerializer):
    class Meta:
        model = Msg
        fields = ["content"]
        extra_kwargs = {"content": {"trim_whitespace": False}}
Run Code Online (Sandbox Code Playgroud)

第二种变体更好,因为DRF仍然可以从模型中正确地拾取其他属性.