Django TextField和CharField正在剥离空格和空行
我刚刚研究了我的“bug”,结果证明它是Django 1.9中的一个新特性,默认情况下CharFields会删除空格: 要应用于文本字段TextField的接缝相同 因此,我发现了为什么Django突然表现出与以前不同的行为,但是有没有一种简单的方法可以恢复自动生成的管理表单以前的默认值 我想不剥离空间,而仍然使用自动生成的形式从管理员。还有可能吗Django TextField和CharField正在剥离空格和空行,django,django-admin,textfield,django-1.9,Django,Django Admin,Textfield,Django 1.9,我刚刚研究了我的“bug”,结果证明它是Django 1.9中的一个新特性,默认情况下CharFields会删除空格: 要应用于文本字段TextField的接缝相同 因此,我发现了为什么Django突然表现出与以前不同的行为,但是有没有一种简单的方法可以恢复自动生成的管理表单以前的默认值 我想不剥离空间,而仍然使用自动生成的形式从管理员。还有可能吗 strip=False 在CharFields的模型字段中 Django TextField不支持此剥离功能,因此您必须自己进行剥离。您可以
strip=False
在CharFields的模型字段中
Django TextField不支持此剥离功能,因此您必须自己进行剥离。您可以使用strip方法
abc.strip()
处理此问题的最佳方法似乎是创建如下自定义管理表单:
class CustomForm(forms.ModelForm):
my_field = forms.CharField(strip=False, widget=forms.Textarea)
class Meta:
model = MyModel
exclude = []
这将创建一个默认表单,其中仅my_字段被其非剥离版本覆盖。)当然,这必须在相应的管理员中设置。如果有人知道更简单的版本。请告诉我 尝试使用以下方法:
# 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)
在您的模型中:
class MyModel(models.Model):
# ...
my_field = NonStrippingTextField()
如果您正在查找文本/字符字段,并且不希望它去除空白,则可以在窗体的构造函数方法中设置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__"
然后,您可以通过在admin.py文件中指定
form=YourForm
在admin中使用此表单。我在django rest模型序列化程序中遇到此问题。我的文本字段中的数据被删除了空白。因此,如果您试图在序列化程序级别执行此操作,则可以在CharField序列化程序上指定whitespace参数。这是源代码
这是其余的文件
根据文档,条带参数仅对表单字段有效,对模型字段无效。。我当然试过了:TypeError:uuu init_uuuuu()得到了一个意外的关键字参数'strip',正如我上面所说的,我想删除strip特性,这是从Django 1.9开始的默认特性-我基本上喜欢它,但对于我当前的项目,我希望没有去掉空格这是个好主意。。下次遇到这个问题时,我会检查:)这对我来说很有效!找不到,所以我发布了,并被标记为重复。我自己在将近一年前已经用更简洁的语法回答了这个问题:)我不确定如果我想从模型表单中的模型中获得字段,而不是定义字段,您的解决方案将如何工作,只是为了确保它具有模型中定义的所有验证检查。您1年前的解决方案对我不起作用,因此我提出了此解决方案并将其发布,因此它可能会对某人有所帮助。:)事实上,这是一个很好的观点——重用生成的字段而不是重新定义它,可能会在这里节省一些工作,以防该字段比我以前的用例更复杂。
class SomeSerializer(serializers.ModelSerializer):
content = serializers.CharField(trim_whitespace=False)
class Meta:
model = YourModel
fields = ["content"]