django-forms - django 1.6 自动删除或添加 http ://from URLField from form data

标签 django-forms django-views django-1.6

我正在阅读 Tango With Django 教程,我在表单章节 ( http://www.tangowithdjango.com/book/chapters/forms.html ) 中遇到了一个我无法开始工作的函数。

诚然,我正在使用 Python 3.3 和 Django 1.6 完成本教程,但是到目前为止我已经能够完成这些教程。

clean 函数 forms.py 应该清理 URLField:

class PageForm(forms.ModelForm):
    title = forms.CharField(max_length=128, help_text="input page title")
    url = forms.URLField(max_length=200, help_text="input page URL")
    views = forms.IntegerField(widget=forms.HiddenInput(), initial=0)

    def clean(self, cleaned_data):
        cleaned_data = super(PageForm, self).clean()
        url = cleaned_data.get('url')

        if url and not url.startswith('http://'):
            url = 'http://' + url
            cleaned_data['url'] = url

        return cleaned_data

    class Meta:
        model = Page
        fields = ('title', 'url', 'views')

这是 add_page.html 模板的摘录:

<form id="page_form" method="POST" action="/rango/category/{{category_name_url}}/add_page/">

        {% csrf_token %}
        {% for hidden in form.hidden_fields %}
            {{ hidden }}
        {% endfor %}

        {% for field in form.visible_fields %}
        <p></p>
            {{ field.errors }}
            {{ field.help_text }}
            {{ field }}
        {% endfor %}

        <p></p>
        <input type="submit" name="submit" value="create page" />
        <br>
</form>

作为一种变通方法,我根据官方 Django 文档调整了 forms.py url 函数以这种方式工作,尽管这不是我的首选方法:

url = forms.URLField(
    max_length=200, help_text="input page URL", initial='http://')

最佳答案

我也有这个问题。我的问题是,当输入缺少 http:// 的 url 字符串时,会不断显示弹出窗口,提示“请输入 URL”。所以 clean() 调用从来没有机会发生。

我认为这是因为表单中 URLfield 的默认小部件执行检查。通过执行以下操作,clean() 代码有机会发生并添加最终丢失的“http://”

from django.forms.widgets import TextInput
...
url = forms.URLField(max_length=200, 
                     help_text="Please enter the URL of the page.", 
                     initial="http://",
                     widget=TextInput)

默认为widget=UrlInput

关于django-forms - django 1.6 自动删除或添加 http ://from URLField from form data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21923838/

相关文章:

django - 什么时候应该在 Django 中使用 db_index=True?

python - 带有附加参数的表单的 __init__ 方法

django - 如何使用 Django 保护他的 AJAX View ?

python - django-评级错误: Unknown column 'resources_resources.ratings_votes' in 'field list'

python - 有什么方法可以使用 Django 模型作为接口(interface)吗?

python - Django NoReverseMatch

python - Django 表格 :Post request is got but data is not saved

javascript - 使用 Javascript 将表单动态添加到 Django 表单集

django - 如何从 django View 中的 url 中删除获取参数

python-3.x - django 模型在每次迁移时都会收到 Alter Field 警报