2014-10-31 2 views
0

Я использую систему аутентификации Django и иметь другую модель, которая о пользователе:как проверить проверку двух форм в форме 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) 

, так что я сделал две формы для пользователя Registeration (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') 

благодарит за все комментарии и ответы.

+0

опечатка ошибку maybe- эта строка: 'если user_form.is_valide и form.is_valid()' '>> здесь user_form.is_valide' должен быть' user_form. is_valid() ' – ruddra

+0

Боковой вопрос: можно ли назвать модель« пользователем »? – rnevius

+0

ruddra: извините, я делаю эту ошибку, когда прошёл мимо нее здесь. – user3789719

ответ

0

Попробуйте добавить различные префиксы к каждой из форм

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

# POST 
user_form = userForm(request.POST, prefix="one") 
form = Form4(request.POST, prefix="two") 
Смежные вопросы