内容简介:翻译自:https://stackoverflow.com/questions/8320739/django-where-to-clean-extra-whitespace-from-form-field-inputs
我刚刚发现Django不会自动从表单字段输入中删除额外的空格,我想我理解其基本原理(‘框架不应该改变用户输入’).
我想我知道如何使用 python 的re删除多余的空格:
#data = re.sub('\A\s+|\s+\Z', '', data) data = data.strip() data = re.sub('\s+', ' ', data)
问题是我应该在哪里这样做?据推测,这应该发生在一个形式的清洁阶段,但哪一个?理想情况下,我想清理所有额外空格的字段.如果它应该在clean_field()方法中完成,这意味着我必须有很多clean_field()方法基本上做同样的事情,这似乎是很多重复.
如果不是表单的清理阶段,那么可能在表单基于的模型中?
谢谢你的帮助!
W.
我的方法是从 here
借来的.但是我使用的是mixin,而不是继承django.forms.Form.这样我可以将它与Form和ModelForm一起使用.此处定义的方法将覆盖BaseForm的_clean_fields方法.
class StripWhitespaceMixin(object): def _clean_fields(self): for name, field in self.fields.items(): # value_from_datadict() gets the data from the data dictionaries. # Each widget type knows how to retrieve its own data, because some # widgets split data over several HTML fields. value = field.widget.value_from_datadict(self.data, self.files, self.add_prefix(name)) try: if isinstance(field, FileField): initial = self.initial.get(name, field.initial) value = field.clean(value, initial) else: if isinstance(value, basestring): value = field.clean(value.strip()) else: value = field.clean(value) self.cleaned_data[name] = value if hasattr(self, 'clean_%s' % name): value = getattr(self, 'clean_%s' % name)() self.cleaned_data[name] = value except ValidationError as e: self._errors[name] = self.error_class(e.messages) if name in self.cleaned_data: del self.cleaned_data[name]
要使用,只需将mixin添加到表单中即可
class MyForm(StripeWhitespaceMixin, ModelForm): ...
此外,如果要在保存没有表单的模型时要修剪空白,可以使用以下mixin.默认情况下,不验证没有表单的模型.当我根据从外部rest api调用返回的json数据创建对象时,我使用它.
class ValidateModelMixin(object): def clean(self): for field in self._meta.fields: value = getattr(self, field.name) if value: # ducktyping attempt to strip whitespace try: setattr(self, field.name, value.strip()) except Exception: pass def save(self, *args, **kwargs): self.full_clean() super(ValidateModelMixin, self).save(*args, **kwargs)
然后在你的models.py中
class MyModel(ValidateModelMixin, Model): ....
翻译自:https://stackoverflow.com/questions/8320739/django-where-to-clean-extra-whitespace-from-form-field-inputs
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 表单 – 避免Symfony强制显示表单字段
- .net – 是否可以修改PDF表单字段名称?
- 如何在Symfony的表单中添加一个未绑定字段,否则绑定到一个实体?
- ruby-on-rails – 无法将电子邮件地址字段放在登录表单(Authlogic)上
- springboot~DTO字符字段与日期字段的转换问题
- Protocol Buffers 学习(2):字段类型和其他语言字段类型之间的映射
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。