Поле Djangoform не отображается

у меня есть регистрационная форма

формы

class RegisterForm(UserCreationForm):
    name = forms.CharField(max_length=255, label='Username', widget=forms.TextInput(attrs={'class': 'form-group'}))
    email = forms.EmailField(max_length=255, label='Email', widget=forms.EmailInput(attrs={'class': 'form-group'}))
    password1 = forms.CharField(label='Password', widget=forms.PasswordInput(attrs={'class': 'form-group'}))
    password2 = forms.CharField(label='Repeat password', widget=forms.PasswordInput(attrs={'class': 'form-group'}))

    class Meta:
        model = User
        fields = ('name', 'email', 'password1', 'password2')

html

<form method="POST" class="register-form" id="register-form" action="">
   {% csrf_token %}
   {% for field in form %}
    
   {{ field.errors }}
   {{ field.label_tag }} {{ field }}
    
   {% endfor %}
<div class="form-group form-button">
   <input type="submit" name="signup" id="signup" class="form-submit"
         value="Register"/>
</div>
</form>

я пробовал {{form.as_p}} и для поля . в обоих случаях поле email не отображается и метки тоже. регистр работает

Хорошо, думаю, я достиг того, о чем вы просили. Во-первых, на самом деле, нет необходимости переопределять fields в RegisterForm, который находится в вашем forms.py файле. Вы можете просто написать его так (User - это class, определенный Django class, который мы фактически используем для создания superuser) :

from django import forms
from django.contrib.auth.forms import  UserCreationForm
from django.contrib.auth.models import User
from django.forms import fields



class NewUserForm(UserCreationForm):
    email = forms.EmailField(required=True)

    class Meta:
        model = User
        fields = ("username" 
                    , "email" 
                    , "password1" 
                    , "password2")

    def save(self, commit=True):
        user = super(NewUserForm, self).save(commit=False)
        user.email = self.cleaned_data['email']
        if commit:
            user.save()
        return user

В views.py как вы написали:

from django.shortcuts import render
from django.views.generic import FormView
from .forms import *
from django.urls import reverse_lazy

class RegisterFormView(FormView):
    form_class = NewUserForm
    success_url = reverse_lazy('boldRichard:login')
    template_name = "register.html"

    def form_valid(self, form):
        form.save()

        return super(RegisterFormView, self).form_valid(form)

    def form_invalid(self, form):
        return super(RegisterFormView, self).form_invalid(form)


class LoginFormView(FormView):
    pass

И наконец в register.html :

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Register</title>
</head>

<body>
    <form method="POST" class="register-form" id="register-form" action="">
        {% csrf_token %}
        

        {{form.as_p}}

        
        <div class="form-group form-button">
            <input type="submit" name="signup" id="signup" class="form-submit" value="Register" />
        </div>
    </form>
</body>

</html>

Пожалуйста, не стесняйтесь комментировать, если требуется дополнительная помощь.

Вернуться на верх