页面未在 django 中保存表单数据

Posted

技术标签:

【中文标题】页面未在 django 中保存表单数据【英文标题】:Page not save forms data in 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'),

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

感谢马克的回复。我尝试了您的建议,现在提交数据后,我留在了 add_page 页面上,但没有什么需要保存 :-( 所以我必须有更多错误代码 :-(

以上是关于页面未在 django 中保存表单数据的主要内容,如果未能解决你的问题,请参考以下文章

提交表单数据后,页面未在 laravel 中正确加载

Django-CMS 自定义插件未在已发布页面中显示数据

Django,模型表格未在数据库中保存数据

Django 会话表单(临时保存表单)

Django Createview根据外键的id保存表单并重定向到页面

在模型 django 中保存表单