- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何在验证 URLField 之前删除空格?
使用“clean_[fieldname]()”似乎是来自 https://docs.djangoproject.com/en/dev/ref/forms/validation/ 的记录方式,但它不适用于 URLField。我将它简化为一个可以在 django shell 中运行的基本测试用例:
class XXXTestModel(models.Model):
url = models.URLField('URL',null=True,blank=True)
name = models.CharField(max_length=200)
class XXXTestForm(ModelForm):
def clean_url(self):
return self.cleaned_data['url'].strip()
def clean_name(self):
return self.cleaned_data['name'].strip()
class Meta:
model = XXXTestModel
fields = (
'url',
)
>>> django.VERSION
(1, 5, 1, 'final', 0)
>>> from xxx import XXXTestForm,XXXTestModel
>>> data = dict(url=' http://www.example.com/ ',name=' example ')
>>> f=XXXTestForm(data)
>>> f.is_valid();f.errors
False
{'url': [u'Enter a valid URL.']}
>>> f.cleaned_data
{'name': example'}
最佳答案
这里的问题是如何django.forms.URLField
作品。django.forms.Field.clean
定义为:
def clean(self, value):
"""
Validates the given value and returns its "cleaned" value as an
appropriate Python object.
Raises ValidationError for any errors.
"""
value = self.to_python(value)
self.validate(value)
self.run_validators(value)
return value
to_python
在任何验证之前执行。这是这里的问题 -
django.forms.URLField
无法理解您给它的值,因此它产生的值使已定义为
django.forms.URLField
一部分的验证器集失败。 (即,
django.core.validators.URLValidator
)。
"http://"
等内容。需要的地方。当给出您的示例网址时,
" http://www.example.com "
, Django 使用
urlparse.urlsplit
获取它的“部分”网址。然而,前导空格将其弄乱,整个值成为
path
的一部分。 .因此,django 找不到
scheme
,并将 URL 重组为
"http:// http://www.example.com "
.然后将其提供给
django.core.validators.URLValidator
,这显然失败了。
URLField
对于我们的表格
from django import forms
class StrippedURLField(forms.URLField):
def to_python(self, value):
return super(StrippedURLField, self).to_python(value and value.strip())
clean_url
方法。 (注意:你应该尽可能使用
clean_*
,但这里不是)
class XXXTestForm(forms.ModelForm):
url = StrippedURLField(blank=True, null=True)
关于django - ModelForm clean_xxxx() 适用于 CharField,不适用于 URLField。 Django 1.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19868000/
我有两个字符字段,name 和 url。 name 类似于“我的组”,我希望 url 字段自动从 name 条目派生。所以它会类似于“my_group”。 这就是我尝试完成此操作的方式,但它不起作用。
我想在模板上输出输入字段,但输出为 django.forms.fields.CharField object at XXXX 如何解决这个问题?我尝试了很多方法来修复它。但我无法解决这些问题。 源代码
背景 我有一个模型,其中有两个字段设置为空白: class News(models.Model):
我正在 Django 中构建一个标记系统,并希望在标记名称中允许显示空格和其他字符,但在匹配名称等时将它们过滤掉并使用小写。 为此,我在标签模型中添加了一个字段,如下所示: class Tag(mod
如何在只能包含数字和字母的Django模型上创建CharField? models.CharField(_('name'), max_length=50, null=False, blank=Fals
我有一个将要发送bas64图像的前端,我会将那些很大的字符串放在变量上并将其发送到表单。我可以使用哪种FormField? 常规CharFields需要一个max_length。因为它是一个很大的字符
在我经常看到的一些django模型中 myfield = models.CharField(_('myfield')) class_name = models.CharField(_('Type'),
我有一个带有 Charfield 的模型: class SomeModel(models.Model): charfield = models.Charfield(max_length=5,
我已经设置了一个模型,根据两勺书的建议(第 6.2.4 节),将几个 Charfield 设置为 Blank=True 而不是 null。 class Supplier(models.Model):
我有以下模型: class ClientDebt(models.Model): client_id = models.CharField(max_length=255) ... 我原以
我正在学习 django 并创建了一个 Page form class像这样: from django import forms class Page(forms.Form): title
CharField('name',max_length=100) 和 CharField(max_length=100) 有什么区别? 参数'name'有什么用? CharField() 构造函数是什
我目前有一个基于用户输入的列表名称的网址。列表名称。一切查询和显示都没有问题。但是,当用户输入空格作为列表名称时,浏览器不能很好地处理它。我意识到我需要对字符串进行 slugify,但不知道如何进行此
如果有以下 Django (1.4) 模型: from django.db import models class SimpleModel(models.Model): name = mode
如何阻止字符字段在另一个发布请求后清除数据? 我有一个带有两种表单的 Django 模板(CharField 文本区域小部件)。我制作了将文本文件上传到相应文本框中的按钮。 如果我按两个按钮之一,一个
我在网上查过,但没有结果。我正在尝试从 Django 中的 CharField 获取 url 字符串。 class EntryForm(forms.ModelForm): class Meta
正如您在下面看到的,我有带有 CharField 的模型。用户可以选择 ROLE_CHOICE 中的值之一。 问题:如何让某些值不可用但您仍然可以在选择中看到它们。 目前,我已经尝试了以下代码,但它使
如何将组合默认值添加到字符字段? 例子 我的类(xxx): type = models.ForeignKey(somewhere) code = models.CharField(default=("
我在 Django 中创建了一个网站,它主要利用一些简单的应用程序让一小群用户添加事件、管理显示上传文件的页面等。最复杂的部分是每个用户都有一个包含内容的主页他们可以通过 MarkupField 管理
我在 models.py 文件中有以下代码: SENT = 0 ACEPTED = 1 DECLINED = 2 SHARE_STATUSES = ( (SENT, 'Sent'), (ACC
我是一名优秀的程序员,十分优秀!