我刚刚研究过我的" bug"事实证明,在Django 1.9中,CharFields默认剥离空格是一个新功能: https://docs.djangoproject.com/en/1.9/ref/forms/fields/#django.forms.CharField.strip
要应用于文本字段的相同接缝。 所以我发现为什么Django突然表现出与以前不同的行为,但是有一种简单的方法来恢复自动生成的管理表单的先前默认值吗?
我想在仍然使用管理员自动生成的表单时不要删除空格。这还有可能吗?
答案 0 :(得分: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)
在你的模特中:
class MyModel(models.Model):
# ...
my_field = NonStrippingTextField()
答案 1 :(得分:6)
strip=False
在CharFields的模型字段中。
Django TextField不支持此剥离功能,因此您必须自己完成。您可以使用条带方法。
abc.strip()
答案 2 :(得分:5)
如果您要查找文本/字符字段并且不希望其去掉空格,则可以在表单的构造方法中设置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
在管理员中使用此表单。
答案 3 :(得分:3)
似乎最好的方法是创建一个这样的自定义管理表单:
class CustomForm(forms.ModelForm):
my_field = forms.CharField(strip=False, widget=forms.Textarea)
class Meta:
model = MyModel
exclude = []
这将创建一个默认表单,仅使用非剥离版本覆盖my_field。 )这必须在相应的管理员中设置。如果有人知道更简单的版本。请告诉我!
答案 4 :(得分:1)
您也可以通过修改 ModelAdmin
来实现这一点。
覆盖 formfield_for_dbfield
函数并为 kwargs['strip'] = False
字段设置 title
将禁用它的自动修剪。
@admin.register(Example)
class ExampleAdmin(admin.ModelAdmin):
def formfield_for_dbfield(self, db_field, request, **kwargs):
if db_field.name == 'title':
kwargs['strip'] = False
return super().formfield_for_dbfield(db_field, request, **kwargs)
参考:https://www.aaronoellis.com/articles/allow-whitespace-to-be-a-valid-charfield-value-in-django-admin
答案 5 :(得分:0)