【问题标题】:How do you save a single space (" ") in a field in a django Model?如何在 django 模型的字段中保存单个空格(“”)?
【发布时间】:2018-01-09 21:30:18
【问题描述】:

我的模型定义如下所示:

class MyModel(models.Model):
    tag_separator = models.CharField(max_length=1, null=True, blank=True)

tag_separator 是单个字符,可以是单个空格:" "
我需要选择null=True 才能让它工作,但是当我通过我的REST API 发布数据时,它会将tag_separator 保存为一个空字符串:"tag_separator": ""

有没有一种简单的方法可以阻止 Django 假设我的单个空格字符串是空字符串?

我正在使用:Django==1.11djangorestframework==3.7.7

【问题讨论】:

    标签: python django django-models django-rest-framework


    【解决方案1】:

    在您的序列化器上,将trim_whitespace=False 传递到您的CharField。即:

    class MyModelSerializer(serializers.ModelSerializer):
        tag_separator = serializers.CharField(trim_whitespace=False)
    
        class Meta:
            model = MyModel
    

    同样,当你使用 django 的表单时,使用strip=False:

    class MyModelForm(forms.ModelForm):
        tag_separator = forms.CharField(strip=False)
    
        class Meta:
            model = MyModel
    

    【讨论】:

    • 不幸的是,它似乎不适用于 django 1.11,因为我使用的是 Python 2.7
    【解决方案2】:

    我是这样解决的:

    class NonStrippingCharField(models.CharField):
        def formfield(self, **kwargs):
            kwargs['strip'] = False
            return super(NonStrippingCharField, self).formfield(**kwargs)
    

    然后在我的模型中:

    class MyModel(models.Model):
        tag_separator = NonStrippingCharField(max_length=1, null=True, blank=True)
    

    【讨论】:

      猜你喜欢
      • 2021-12-21
      • 2011-06-11
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      • 2017-04-04
      • 1970-01-01
      相关资源
      最近更新 更多