我刚刚研究了我的"bug",结果证明它是Django 1.9中的一个新功能,CharFields默认剥离空格:https: //docs.djangoproject.com/en/1.9/ref/forms/fields/#django.forms .CharField.strip
应用于文本字段的相同接缝.所以我发现为什么Django突然表现出与以前不同的行为,但有一种简单的方法来恢复自动生成的管理表单的先前默认值吗?
我想在仍然使用管理员自动生成的表单时不要删除空格.这还有可能吗?
如果您要查找文本/字符字段并且不希望其去掉空格,则可以在表单的构造方法中设置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文件中指定在管理员中使用此表单。
试试这个:
# 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)
似乎处理此问题的最佳方法是创建一个自定义管理表单,如下所示:
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 被其非剥离版本覆盖。)当然这必须在相应的管理员中设置。如果有人知道更简单的版本。请告诉我!
归档时间: |
|
查看次数: |
4650 次 |
最近记录: |