Django 表格 : Validation message not showing

标签 django django-forms

任何人都可以在下面的示例中发现我做错了什么。当输入错误的详细信息(例如无效的电子邮件地址)时,验证消息不会出现在我的模板中。模板正在加载并且没有错误。

我排除了要在页面上打印的验证消息,但是由于某种原因,这突然停止工作了。正如您从下面的代码示例中看到的那样,我将上下文中的表单传递回模板。这曾经有效,今天刚刚停止。

view.py

if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            # If form has passed all validation checks then continue to save member.
            user = User.objects.create_user(
                                            username=form.cleaned_data['username'],
                                            email=form.cleaned_data['email'], 
                                            password=form.cleaned_data['password']
                                            )
            user.save()
            #member = User.get_profile()
            #member.name = form.cleaned_data['name']
            #member.save()
            member = Member(
                            user=user,
                            name=form.cleaned_data['name']
                            )
            member.save()

            # Save is done redirect member to logged in page.
            return HttpResponseRedirect('/profile')
        else:
            # If form is NOT valid then show the registration page again.
            form = RegistrationForm() 
            context = {'form':form}
            return render_to_response('pageRegistration.html', context,context_instance=RequestContext(request))

表单.py

class RegistrationForm(ModelForm):
    username = forms.CharField(label=(u'User Name'))
    email = forms.EmailField(label=(u'Email'))
    password = forms.CharField(label=(u'Password'), widget=forms.PasswordInput(render_value=False))
    passwordConfirm = forms.CharField(label=(u'Confirm Password'), widget=forms.PasswordInput(render_value=False))

    class Meta:
        model = Member
        # Don't show user drop down.
        exclude = ('user',)


    def clean_username(self):
        username = self.cleaned_data['username']
        try:
                User.objects.get(username=username)
        except User.DoesNotExist:
                return username
        raise forms.ValidationError("Username already taken.")


    def clean(self):
        try:   
            cleaned_data = super(RegistrationForm, self).clean() 
            password = cleaned_data.get("password")
            passwordConfirm = cleaned_data.get('passwordConfirm')

            if password != passwordConfirm:
                raise forms.ValidationError("Password does not match, try again.")
            return cleaned_data
        except:
            raise forms.ValidationError("Error")

pageRegistration.html

<form action="" method="POST">
            {% csrf_token %}

            {% if forms.errors %}
            <p>
                correct some stuff
            </p>
            {% endif %}

            {{form}}
            <br>
            <input type="submit" value="submit">
        </form>  

最佳答案

因为表单在 else 子句中未验证,您的表单变量被新表单覆盖,它丢失了所有错误

if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            # If form has passed all validation checks then continue to save member.
            user = User.objects.create_user(
                                            username=form.cleaned_data['username'],
                                            email=form.cleaned_data['email'], 
                                            password=form.cleaned_data['password']
                                            )
            user.save()
            #member = User.get_profile()
            #member.name = form.cleaned_data['name']
            #member.save()
            member = Member(
                            user=user,
                            name=form.cleaned_data['name']
                            )
            member.save()

            # Save is done redirect member to logged in page.
            return HttpResponseRedirect('/profile')
        return render_to_response('pageRegistration.html', context,context_instance=RequestContext(request))

关于Django 表格 : Validation message not showing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13937912/

相关文章:

Django:允许用户在表单字段中提交有效的HTML

python - django:如何从 CharField 和 ModelChoiceField 获取值(value)

jquery - 如何将 Django 与 JqueryUI 对话框集成?

python - 如何在 django 中间件中重定向?全局名称 'view' 未定义

angularjs - Django Rest框架+AngularJS : Correct way for CSRF Protection?

Django - 管理中的外键字段初始值定义

python - 允许通过 Django 管理将 SVG 文件上传到 ImageField

django - 如何在我的 HyeprlinkedModelSerializer 中使用自定义序列化器字段

python - 匹配文本中存储的关键字/短语

django - Twitter Bootstrap的Django错误样式