【问题标题】:Validating the form without required field in django 1.8在 django 1.8 中验证没有必填字段的表单
【发布时间】:2017-03-30 23:49:04
【问题描述】:

我的 django modelform 让用户提交表单而不会引发错误,即使用户没有提交适当的表单,这里它允许用户将电子邮件字段保持为空白。由于 is_valid( ) 但页面刷新并且表单再次变为空白......这是代码

models.py

from django.db import models

class MainForm(models.Model):
    text = models.CharField(max_length=100)
    email = models.EmailField(blank=False)
    name = models.CharField(max_length=100,blank=False)


def __unicode__(self):
    return self.email

forms.py

from django import forms
from .models import MainForm,new_model


class form_MainForm(forms.ModelForm):
    class Meta:
        model = MainForm
        fields = '__all__'

views.py

def view_MainForm(request):

context = {
    "form": form_MainForm
}

if request.method == 'POST' :
    form_instance = form_MainForm(request.POST or None)
    if form_instance.is_valid():
        form_instance.save()
        return render(request,'done.html',{'text':form_instance.cleaned_data.get('email')})

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

模板->main_form.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Main Form</title>
</head>
<body>


<form method="post" action=".">
{% csrf_token %}
{{ form.as_p }}
<input type="submit"  value="Submit">
</form>




</body>
</html>

【问题讨论】:

    标签: python django forms django-forms django-1.8


    【解决方案1】:

    您的视图函数错误 - 您必须将无效表单传递给上下文以获取错误消息,即:

    def view_MainForm(request):    
        if request.method == 'POST' :
            form_instance = form_MainForm(request.POST)
            if form_instance.is_valid():
                form_instance.save()
                # here you should redirect to avoid
                # re-submission of the form on page reload
                # cf https://en.wikipedia.org/wiki/Post/Redirect/Get
                return render(request,'done.html',{'text':form_instance.cleaned_data.get('email')})
    
        else:
            form_instance = form_MainForm()
    
        context = {"form": form_instance}
        return render(request,'main_form.html',context)
    

    【讨论】:

      【解决方案2】:

      检查此链接以在您的表单 https://docs.djangoproject.com/en/1.10/topics/forms/#rendering-form-error-messages 中呈现错误,这将给出一个想法,例如您无法保存数据的原因。 当您发回表格时,它应该是 context = {"form": form_MainForm(request.POST)} ,这将显示表单提交的值

      【讨论】:

        猜你喜欢
        • 2020-10-15
        • 1970-01-01
        • 2020-04-16
        • 1970-01-01
        • 2017-06-24
        • 2022-11-22
        • 2017-02-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多