内容简介:翻译自: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.
借来的.但是我使用的是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):字段类型和其他语言字段类型之间的映射
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
文明之光(第一册)
吴军 / 人民邮电出版社 / 2014-6-25 / 59.00元
人类的历史,是从野蛮蒙昧一步步走向文明进步的过程。在文明的进程中,人类创造出多元的文化,它们有着各自的特长。要实现人类和平发展的终极理想,一个重要的前提是承认文化的多元性,并且取长补短,相互融合。 吴军博士写作《文明之光》系列,希望能开阔人们的视野,让我们看到各种各样的人类文明。虽然今天不同的地区发达程度不同,文明历史的长短不一,国家亦有大小之分,但是文明之光从世界的每一个角落发出,对人类的......一起来看看 《文明之光(第一册)》 这本书的介绍吧!