【问题标题】:how check two forms validation in django form?如何检查 django 表单中的两个表单验证?
【发布时间】:2014-12-27 15:11:22
【问题描述】:

我正在使用 Django 身份验证系统,并且有另一个关于用户的模型:

class user(models.Model):
    user = models.OneToOneField(User)
    user_code=models.IntegerField(max_length=3)
    phone=models.IntegerField(max_length=10)
    task=models.ForeignKey(task)
    class Meta:
        unique_together = ('user_code', 'task')
    def __unicode__(self):
        return str(self.user_code)

所以我做了两个用户注册表格(form.py):

class userForm(forms.ModelForm):
    class Meta:
        model=User
        widgets = {'password': forms.PasswordInput(),}

class Form4(forms.ModelForm):
    class Meta:
        model=user

现在在我看来,我想将两个表单发送到模板并提交它们。一切都很好,但提交后我无法检查表单验证?这是我的看法:

def add_new_user(request):
    if request.method == 'POST': # If the form has been submitted...
        user_form = userForm(request.POST) # django User
        form = Form4(request.POST)      # my model user
        if user_form.is_valid() and form.is_valid():          # All validation rules pass **edited** is_valide
            user_name=user_form.cleaned_data['username']
            password = user_form.cleaned_data['password']
            name=user_form.cleaned_data['first_name']
            user_id = form.cleaned_data['user_code']
            email = user_form.cleaned_data['email']
            phone = form.cleaned_data['phone']
            task = form.cleaned_data['task']
        else:  # **added** form invalid statement
            return render(request, 'student/form4.html', {'form': form,'user_form':user_form})

        try:  #**moved from valid statement**
            do somthing...  
        except ValueError :
            do somthing...       
     else:
        form = Form4()
        user_form=userForm()
        # An unbound form
        return render(request, 'student/form4.html', {'form': form,'user_form':user_form})

这是我的模板(form4.html):

<form name="myForm" action="{% url 'student:add_new_user' %}" onsubmit="return validateForm4();"     method="post">
        {% csrf_token %}
        <div id="form-data">
        {{ form.non_field_errors }}
            {{ user_form.username }}{{ user_form.username.errors }}
            <label for="id_user_name">user name:</label><br>
            {{ user_form.password }}{{ user_form.password.errors }}
            <label for="id_password">password:</label><br>
            {{ user_form.first_name }}{{ user_form.first_name.errors }}
            <label for="id_name">first name:</label><br>
            {{ user_form.email }}{{ user_form.email.errors }}
            <label for="id_email">email:</label><br>

            {{ form.user_code }}{{ form.user_code.errors }}
            <label for="id_email">use ID:</label><br>

            {{ form.phone }}{{ form.phone.errors }}
            <label for="id_phone">phone number:</label><br>

            {{ form.task }}{{ form.task.errors }}
            <label for="id_task">task:</label><br>
            <input type="submit" value="register" /><br>
        </div>
    </form>     

但它对两个验证都返回 False。如何检查验证?

回答

我从用户和用户中添加我想要的字段。并将我的“form.py”更改为:

class userForm(forms.ModelForm):
    class Meta:
       model=User
       fields = ('username', 'password','first_name','email' )
       widgets = {'password': forms.PasswordInput(),}
class Form4(forms.ModelForm):
    class Meta:
        model=user
        fields = ('user_code', 'phone','task' )

感谢所有cmets和回答。

【问题讨论】:

  • 可能是错字——这一行:if user_form.is_valide and form.is_valid() >> 这里user_form.is_valide 应该是user_form.is_valid()
  • 附带问题:是否可以将模型命名为“用户”?
  • ruddra:对不起,我在这里过去时犯了这个错误。
  • mevius:是的,有可能因为 django 有“用户”。
  • 通常如果 is_valid() 返回 false,你应该在模板中看到错误消息,如果你渲染 {{form}} 和 {{user_form}} 我认为你错过了 RequestContext:return render_to_response(' student/form4.html', {'form': form,'user_form':user_form}, context_instance = RequestContext(request))

标签: python django forms validation


【解决方案1】:

尝试为每个表单添加不同的前缀

# GET
user_form = userForm(prefix="one")
form = Form4(prefix="two")

# POST
user_form = userForm(request.POST, prefix="one")
form = Form4(request.POST, prefix="two")

【讨论】:

    猜你喜欢
    • 2021-04-05
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 2011-03-10
    相关资源
    最近更新 更多