代码之家  ›  专栏  ›  技术社区  ›  liansheng

在Django REST控件中,序列化程序不会自动删除空格꼟

  •  9
  • liansheng  · 技术社区  · 8 年前

    模型py公司

    class Msg(models.Model):
        content = models.CharField(max_length=1024, null=True)
    

    序列化程序。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'} 所以数据库中的空间消失了。
    如何保留空格?

    3 回复  |  直到 8 年前
        1
  •  17
  •   Kos    8 年前

    从…起 DRF docs on CharField :

    trim_whitespace -如果设置为True,则会修剪前导和尾随空格。默认为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
  •  1
  •   Hayden    8 年前

    可以通过实现方法to\u representation()自定义该字段的输出

        3
  •  1
  •   Lakhan    8 年前

    您可以使用 trim\u空格 django rest框架序列化程序中提供的选项。

    class MessageSerializer(serializers.ModelSerializer):
        content = serializers.CharField(max_length=1024, trim_whitespace=True)
    
        class Meta:
            model = Msg
            fields = ["content"]
    
    推荐文章