【问题标题】:Cant save form data in data base -Django无法将表单数据保存在数据库中-Django
【发布时间】:2018-03-16 08:48:45
【问题描述】:

我正在尝试创建一个简单的表单,它将姓名和电子邮件作为用户输入。 但是在我提交后,它没有保存在数据库中 manage.py dumpdata 显示 [] 即空行。 请帮忙!

models.py

class EmpD(models.Model):
    name = models.CharField(max_length=100)
    email=models.CharField(max_length=100) 

forms.py

class SubmitF(forms.ModelForm):
    name = forms.CharField()
    email= forms.CharField()
    class Meta:
        model = EmpD
        fileds = '_all_'

views.py

def submit_view(request):
template_name = 'emp/home.html'
redirect_url = 'emp/su.html'
form = SubmitF()

if request.method == 'POST':
    form = SubmitF(request.POST)
    if form.is_valid():
       form.save()

       return HttpResponseRedirect(redirect_url)
else:
    return render(request, template_name, {'form': form})

def index(request):
return render(request, 'emp/home.html')

包含表单的html:

<form action='' method="post" >

{% csrf_token %}
{{ form }}

<table border="0" cellpadding="5" cellspacing="0">
<tr> <td style="width: 50%">
<label for="Name"><b>First name *</b></label><br />
<input name="Name" type="text" maxlength="50" style="width: 260px" />
</td> <td style="width: 50%">

</td> </tr> <tr> <td colspan="2">
<label for="Email_Address"><b>Email *</b></label><br />
<input name="Email_Address" type="text" maxlength="100" style="width: 535px" 
/>
</td> </tr> <tr> <td colspan="2">



<input  type="submit" value="Submit Data" />

</td> </tr>
</table>
</form>

应用 urls.py

urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^$', views.submit_view, name='submit_view')]

【问题讨论】:

  • 请修复views.py代码中的缩进并显示您的网址
  • (fileds = '_all_' --> fields = '_all_')
  • @PRMoureu 实际上是fields = '__all__' :)

标签: django django-models django-forms django-views


【解决方案1】:

建模、单独的表单字段和单个表单的 3 个视图是非常糟糕的方法。 尝试这个。定义简单的模型。对于电子邮件输入,定义电子邮件字段,表单本身进行验证。

模型.py

class EmpD(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField(null=True, blank=True)

定义forms.py,如果你想包含models字段,fields='__all__'会帮你搞定, 否则在此表单中定义其他字段

forms.py

class SubmitF(forms.ModelForm):
    class Meta:
        model = EmpD
        fields = '__all__'

简单的views.py,如果请求方法是Get,表单渲染,In Post请求,数据传给服务器。

def submit_view(request):
    template_name = 'path_to_html'
    redirect_url = 'your_url'
    form = SubmitF()

    if request.method == 'POST':
        form = SubmitF(request.POST)
        if form.is_valid():
           form.save()
           return HttpResponseRedirect(redirect_url)
    else:
        return render(request, template_name, {'form': form})

模板结构

<form action="/your-name/" method="post">
    <label for="name">Your name: </label>
    <input id="id_name" type="text" name="name" value="{{ current_name }}">
    <input type="submit" value="OK">
</form>

【讨论】:

  • 为什么要添加login_required
  • 删除它,不管:)
  • 我的意思是你可以为 OP 制造新的麻烦,它在当前的逻辑中是不存在的
  • @Sagar 我尝试了您的简单方法并进行了所有更改,但转储数据仍然显示空行
  • @Sagar 我是否需要为 views.py 中定义的 submit_view 创建 url 模式?
猜你喜欢
  • 1970-01-01
  • 2021-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-09
  • 2017-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多