Ошибки формы Django не отображаются при использовании id_<имя поля>

Я новичок в Django, я пытаюсь использовать метод for="id_<field-name>" для создания интерфейса формы регистрации, но стандартная валидация типа "Это поле обязательно." или "Это имя пользователя уже существует" не отображается. Я не хочу использовать {{ form.as_p }}, потому что я хочу разделить поле. Регистрация все еще работает, если я ввожу истинные и правильные значения.

HTML

<form method="POST" class="register-form" id="register-form" enctype="multipart/form-data" >
 {% csrf_token %}

  <div class="form-group">
       <label for="id_username"><i class="zmdi zmdi-account material-icons-name"></i></label>
       <input type="text" name="username" id="username" placeholder="Username"/>
  </div>
                   
  <div class="form-group">
       <label for="id_email"><i class="zmdi zmdi-email"></i></label>
       <input type="email" name="email" id="email" placeholder="Your Email" />

  </div>                  
   
  <div class="form-group">       
       <label for="id_password"><i class="zmdi zmdi-lock"></i></label>
       <input type="password" name="password" id="password" placeholder="Password"/>
  </div>
                    
  <div class="form-group">
       <input type="checkbox" name="agree-term" id="agree-term" class="agree-term" />
       <label for="agree-term" class="label-agree-term"><span><span></span></span>I agree all statements in  <a href="#" class="term-service">Terms of service</a></label>
 </div>
 
 <div class="form-group form-button">
       <input type="submit" name="signup" id="signup" class="form-submit" value="Register"/>
 </div>
 </form>

views.py

def register(request):

registered = False

if request.method == 'POST':

    # Get info from "both" forms
    # It appears as one form to the user on the .html page
    user_form = UserForm(data=request.POST)
    profile_form = UserProfileInfoForm(data=request.POST)

    # Check to see both forms are valid
    if user_form.is_valid() and profile_form.is_valid():

        # Save User Form to Database
        user = user_form.save()

        # Hash the password
        user.set_password(user.password)

        # Update with Hashed password
        user.save()

        # Now we deal with the extra info!

        # Can't commit yet because we still need to manipulate
        profile = profile_form.save(commit=False)

        # Set One to One relationship between
        # UserForm and UserProfileInfoForm
        profile.user = user

        # Check if they provided a profile picture
        if 'profile_pic' in request.FILES:
            print('found it')
            # If yes, then grab it from the POST form reply
            profile.profile_pic = request.FILES['profile_pic']

        # Now save model
        profile.save()


        # Registration Successful!
        registered = True

    else:
        # One of the forms was invalid if this else gets called.
        print(user_form.errors,profile_form.errors)

else:
    # Was not an HTTP post so we just render the forms as blank.
    user_form = UserForm()
    profile_form = UserProfileInfoForm()

# This is the render and context dictionary to feed
# back to the registration.html file page.
return render(request,'basic_app/registration.html',
                      {'user_form':user_form,
                       'profile_form':profile_form,
                       'registered':registered,
                       })

forms.py

from django import forms
from django.contrib.auth.models import User
from .models import UserProfileInfo, TeaProfileInfo

class UserForm(forms.ModelForm):
    password = forms.CharField(widget=forms.PasswordInput())
   
    class Meta():
    model = User
    fields = ('username','email','password')

Мой интерфейс страницы регистрации

Быстрый способ проверки формы - добавить следующее в файл form.py

def clean(self):
    super(UserForm, self).clean()

    username = self.cleaned_data.get('username')
    email = self.cleaned_data.get('email')
    password = self.cleaned_data.get('password')

    if username == "" or email == "" or password  == "":
        raise forms.ValidationError(['This field is required.'])
Вернуться на верх