django表单验证未显示

django表单验证未显示,django,Django,我有这个模型: class Member(models.Model): profile = models.OneToOneField(Profile, editable=False, null=True) title = models.CharField(max_length=4, choices=TITLE_TYPES, null=True) name = models.CharField(max_length=100, null=True, verbose_name=

我有这个模型:

class Member(models.Model):
    profile = models.OneToOneField(Profile, editable=False, null=True)
    title = models.CharField(max_length=4, choices=TITLE_TYPES, null=True)
    name = models.CharField(max_length=100, null=True, verbose_name='Name') 
    lastname = models.CharField(max_length=100, null=True, verbose_name='LastName') 
    gender = models.CharField(max_length=1, choices=GENDER_CHOICES, null=True, verbose_name='Gender') 
    dob = models.DateField('dob')
    redressno = models.CharField(max_length=100, null=True, verbose_name='RedressNo') 
表格:

class MemberForm(ModelForm):
  dob = forms.DateField(required=False, input_formats=('%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y'))
  class Meta:
    model = Member
    exclude = ('profile',)   
视图:

MemberFormSet = formset_factory(MemberForm, formset=BaseFormSet)
    print request.method
    if request.method == 'POST': # If the form has been submitted...
        signup_form = SignupForm(None, request.POST) # A form bound to the POST data
        # Create a formset from the submitted data
        member_formset = MemberFormSet(request.POST, request.FILES)
        # import pdb; pdb.set_trace()
        if signup_form.is_valid() and member_formset.is_valid():
          print 'in valid'
          signup = signup_form.save(request.POST)
          for form in member_formset.forms:
            member = form.save(commit=False)
            member.profile = signup
            # import pdb; pdb.set_trace()
            member.save()
            #log-in to user
          user = authenticate(username = request.POST['username'], password = request.POST['password'] )
          auth_login(request, user)
          return redirect("/main") # Redirect to a 'success' page
    else:
        signup_form = SignupForm()
        data = {
          'form-TOTAL_FORMS': u'1',
          'form-INITIAL_FORMS': u'0',
          'form-MAX_NUM_FORMS': u''
        }
        member_formset = MemberFormSet(data)
        # member_formset.total_form_count=0

    # For CSRF protection
    # See http://docs.djangoproject.com/en/dev/ref/contrib/csrf/ 
    c = {
          'form': signup_form,
          'member_formset': member_formset,
        }
    c.update(csrf(request))
    return render_to_response('registration.html', c, RequestContext(request))  
模板:

    <form action="/registration/" method="POST">
    {% csrf_token %}
<div class="section">
    {{ form.as_p }}
</div>
   <h2>Members</h2>
      {{ member_formset.management_form }}
     {% for form in member_formset.forms %}
      <div class="item">
         {{ form.as_table }}
       <p style=""><a class="delete" href="#">Delete</a></p>
         </div>
        {% endfor %}
     <p><a id="add" href="#">Add another item</a></p> 
      <input type="submit" value=" Submit " />

{%csrf_令牌%}
{{form.as_p}}
成员
{{member_formset.management_form}
{成员_formset.forms%}中表单的%
{{form.as_table}}

{%endfor%}


对memberform的验证无效。请说明原因?

首先,我没有看到无效表单的
else
分支。其次,第一个参数,
None
,对于此行中的表单初始化不是错误的:
signup\u form=SignupForm(None,request.POST)
首先,我没有看到无效表单的
else
分支。其次,第一个参数,
None
,对于此行中的表单初始化不是错误的:
signup\u form=SignupForm(None,request.POST)
您没有真正解释您的问题,但是我猜如果注册表单无效,您不会继续验证成员表单集,因为这一行:

if signup_form.is_valid() and member_formset.is_valid():
在Python中,与许多其他语言一样,
是快捷方式求值的:也就是说,如果第一个元素为False,则永远不会求值第二个元素。因此
是有效的
永远不会在表单集上运行,因此不会显示任何错误

相反,请执行以下操作:

signup_valid = signup_form.is_valid()
formset_valid = member_formset.is_valid()
if signup_valid and formset_valid:

这确保了两个验证分别执行。

您并没有真正解释您的问题,但我猜如果注册表单无效,您不会继续验证成员表单集,因为这行代码:

if signup_form.is_valid() and member_formset.is_valid():
在Python中,与许多其他语言一样,
是快捷方式求值的:也就是说,如果第一个元素为False,则永远不会求值第二个元素。因此
是有效的
永远不会在表单集上运行,因此不会显示任何错误

相反,请执行以下操作:

signup_valid = signup_form.is_valid()
formset_valid = member_formset.is_valid()
if signup_valid and formset_valid:

这确保了两个验证都是单独执行的。

以什么方式不起作用?模板中未出现错误?以何种方式不起作用?模板中未出现错误?如果提交的dob为空,则如何才能
member\u formset.is\u valid()==True
如何在视图中验证dob?每个有效表单都有一个
已清理的\u数据
字典,如果用户在表单中提供该字典,则该字典应具有
dob
键。例如,
dob=form.cleaned\u data.get('dob')
。不需要
否则
对于无效表单,它将一直到模板呈现的最后。这是验证Django表单的正确模式。如果提交的dob为空,则如何才能
成员\u表单集。是否有效()==True
如何在视图中验证dob?每个有效表单都有一个
已清理的\u数据
字典,如果用户在表单中提供了该字典,则该字典应具有
dob
键。例如,
dob=form.cleaned\u data.get('dob')
。不需要
否则
对于无效表单,它将一直到模板呈现的最后。这是验证Django表单的正确模式。