Django表单未提交

Posted

技术标签:

【中文标题】Django表单未提交【英文标题】:Django form not being submitted 【发布时间】:2012-03-09 06:40:49 【问题描述】:

我有一个在模板中正确呈现的 Django 模型/视图/表单,但它没有提交输入到数据库的数据。对此的任何帮助将不胜感激!

#models.py

from django.db import models
from django.forms import ModelForm

class UserRegistration(models.Model):
    user_first = models.CharField(max_length=50)
    user_last = models.CharField(max_length=50)
    user_email = models.EmailField()
    #user_fantasyhost = models.CharField(max_length=50)

    def __unicode__(self):
        return u'%s %s %s' % (self.user_first, self.user_last, self.user_email)

class RegForm(ModelForm):
    class Meta:
        model = UserRegistration

#views.py

from django.shortcuts import render_to_response
from django.shortcuts import render
from django.http import HttpResponse, HttpRequest, HttpResponseRedirect
from acme.dc_django.models import UserRegistration
from acme.dc_django.models import RegForm

def regPage(request, id=None):
    form = RegForm(request.POST or None,
                       instance=id and UserRegistration.objects.get(id=id))

    if request.method == 'POST' and form.is_valid():
        form.save()
        return HttpResponseRedirect('/league_setup/')
    user_info = UserRegistration.objects.all()
    context = 
        'form':form,
        'user_info' :user_info,
    

    return render(request, 'regpage.html', context)

#repage.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML lang="en">
<head>
    <title>User Registration</title>
</head>
<body>

    <form method="POST" action="/league/">
        % csrf_token %
        <table> form </table>
        <input type="submit" value="Create Account" 
    </form><br /><br />

</body>
</HTML>

感谢您的帮助,

dp

【问题讨论】:

您还没有关闭表单提交标签,但这可能只是一个错字,您的浏览器可能可以处理它。这类问题往往比我们更容易调试。观点错在哪里?在视图中放置一些打印语句以找出答案。例如,form.is_valid() 的值是什么。 您能否详细说明什么不起作用?我发现but it is not submitting the data that is input to the database 令人困惑 我没有收到错误,当我回到我的桌面时,我将包含打印语句。问题是当我点击提交按钮时,什么都没有发生——什么都没有。既然你指出了打开的标签,我会看看这是一个错字还是问题所在。以后再说。谢谢。 我关闭了提交标签,现在提交按钮将我带到正确的页面,但数据从未写入数据库,我将插入打印语句... 请更新代码示例 【参考方案1】:

我试过你的代码。您的问题是您的 html form 标签action 属性设置为“/league/”。

除非 reqPage url 实际上是“/league/”,否则它将不起作用。当我将action="/league/" 更改为action="" 时:

<HTML lang="en">
<head>
    <title>User Registration</title>
</head>
<body>

    <form method="POST" action="">
        % csrf_token % 
        <table> form </table>
        <input type="submit" value="Create Account"  />
    </form><br /><br />

</body>
</HTML>

表格确实起作用了:

In [3]: UserRegistration.objects.all()
Out[3]: [<UserRegistration: aoeu oeu oeu@aeou.com>]

【讨论】:

在看到你的回答之前,我做了同样的事情,得到了同样的结果!谢谢您的帮助! dp

以上是关于Django表单未提交的主要内容,如果未能解决你的问题,请参考以下文章

Django 表单未使用 Javascript 提交

Django:提交表单时未显示错误

Django:未提交表单中的只读字段

Django表单用户表单未登顶

Django,表单未在模板中呈现

表单未在 Django 中发布