Django TextField/CharField正在剥离空格/空行

And*_*ndy 12 django textfield

我刚刚研究了我的"bug",结果证明它是Django 1.9中的一个新功能,CharFields默认剥离空格:https: //docs.djangoproject.com/en/1.9/ref/forms/fields/#django.forms .CharField.strip

应用于文本字段的相同接缝.所以我发现为什么Django突然表现出与以前不同的行为,但有一种简单的方法来恢复自动生成的管理表单的先前默认值吗?

我想在仍然使用管理员自动生成的表单时不要删除空格.这还有可能吗?

Sha*_*mad 9

如果您要查找文本/字符字段并且不希望其去掉空格,则可以在表单的构造方法中设置strip = False,然后在管理中使用该表单

class YourForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(YourForm, self).__init__(*args, **kwargs)
        self.fields['myfield'].strip = False

    class Meta:
        model = YourModel
        fields = "__all__"
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过form=YourForm在admin.py文件中指定在管理员中使用此表单。


Udi*_*Udi 8

试试这个:

# fields.py
from django.db.models import TextField


class NonStrippingTextField(TextField):
    """A TextField that does not strip whitespace at the beginning/end of
    it's value.  Might be important for markup/code."""

    def formfield(self, **kwargs):
        kwargs['strip'] = False
        return super(NonStrippingTextField, self).formfield(**kwargs)
Run Code Online (Sandbox Code Playgroud)

在你的模型中:

class MyModel(models.Model):
    # ...
    my_field = NonStrippingTextField()
Run Code Online (Sandbox Code Playgroud)


小智 7

strip=False 
Run Code Online (Sandbox Code Playgroud)

在CharFields的模型字段中.


Django TextField不支持此剥离功能,因此您必须自己完成.您可以使用strip方法.

abc.strip()
Run Code Online (Sandbox Code Playgroud)

  • 根据文档,strip参数仅对表单字段有效,但对模型字段无效..我当然尝试过:TypeError:__ init __()得到一个意外的关键字参数'strip' (3认同)

And*_*ndy 5

似乎处理此问题的最佳方法是创建一个自定义管理表单,如下所示:

class CustomForm(forms.ModelForm):
    my_field = forms.CharField(strip=False, widget=forms.Textarea)

    class Meta:
        model = MyModel
        exclude = []
Run Code Online (Sandbox Code Playgroud)

这将创建一个默认表单,其中 my_field 被其非剥离版本覆盖。)当然这必须在相应的管理员中设置。如果有人知道更简单的版本。请告诉我!