【问题标题】:Page not save forms data in django页面未在 django 中保存表单数据
【发布时间】:2014-11-22 15:38:48
【问题描述】:

我正在尝试使用 django 进行探戈练习 7,我必须通过向表单添加信息来将新页面保存到特定类别。

所以我在 forms.py 中编写了新代码

class PageForm(forms.ModelForm):
    title = forms.CharField(max_length=128, help_text="Please enter the title of the page.")
    url = forms.CharField(max_length=200, help_text="Please enter the url of the page.")
    views = forms.IntegerField(widget=forms.HiddenInput(), initial=0)

    class Meta:
        model = Page

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

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

        fields = ('title', 'url', 'views')  

    def save_form(self):
        if self.is_valid():
            page = self.save(commit=False)
            try:
                cat = Category.objects.get(name=category_name)
                page.category = cat
            except:
                return render_to_response('rango/add_category.html', {}, context)
            page.views = 0
            page.save()

            return True
        else:
            return False 

然后我编辑views.py

def add_page(request, category_name_url):
    context = RequestContext(request)

    category_name = decode_url(category_name_url)
    if request.method == 'POST':
        form = PageForm(request.POST)
        if form.save_form():
           return category(request, category_name_url)
        else:
            print form.errors
    else:
        form = PageForm()

    return render_to_response( 'rango/add_page.html',
            {'category_name_url': category_name_url,
             'category_name': category_name,
             'form': form},
             context)

def decode_url(element):
    return element.replace(' ', '_')

def encode_url(element):
    return element.replace('_', '')

然后我创建了模板:

兰戈

<body>
    <h1>Add page to category</h1>

    <form id="page_form" method="post" action="/">

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

        {% for field in form.visible_fields %}
            {{ field.errors }}
            {{ field.help_text }}
            {{ field }}
        {% endfor %}

        <input type="submit" name="Submit" value="Add a page" />
    </form>
</body> </html>

我在 category.html 中引用了新页面

<a href="/rango/category/{{ category_name_url }}/add_page/">Add page to this category</a>

当然还有编辑 urls.py

> url(r'^rango/category/(?P<category_name_url>\w+)/add_page/$',
> views.add_page, name='add_page'),

一切都是可见的,我可以填写表格。但是当我通过单击按钮确认数据时,页面返回主页而不是类别,并且新页面未保存在数据库中。所以请某人,哪里有错误?

【问题讨论】:

    标签: python django forms save


    【解决方案1】:

    您的&lt;form&gt; 元素的操作设置为action="/"。这使得表单提交向主页而不是当前页面发送 POST 请求。您可以通过将表单操作设为空 action="" 以提交到当前 URL 或明确并使用 {% url %} 模板标记来进行所需的表单操作来纠正此问题。

    【讨论】:

    • 感谢马克的回复。我尝试了您的建议,现在提交数据后,我留在了 add_page 页面上,但没有什么需要保存 :-( 所以我必须有更多错误代码 :-(
    猜你喜欢
    • 2016-03-25
    • 2020-10-07
    • 2021-08-13
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 2015-10-13
    相关资源
    最近更新 更多