No meu aplicativo web Django, estou tentando criar um aplicativo de jornal. Na minha página inicial, quando clico no SIGN UP
botão, recebo o erro "Configurado incorretamente em /accounts/signup/". Não descobri onde está o problema.
forms.py:
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from .models import CustomUser
class CustomUserCreationForm(UserCreationForm): #Creation of CustomUser
class Meta:
model = CustomUser
fields = UserCreationForm.Meta.fields + ("age",)
class CustomUserChangeForm(UserChangeForm): #Modifying existing users
class Meta:
model = CustomUser
fields = UserChangeForm.Meta.fields
emodels.py:
from django.contrib.auth.models import AbstractUser #username, pw1, pw2
from django.db import models
class CustomUser(AbstractUser):
age = models.PositiveIntegerField(null=True, blank=True)
urls.py:
from django.urls import path
from .views import SignUpView
#Accounts/urls.py : Handles only registrations URLs!!
urlpatterns = [
path('signup/', SignUpView.as_view(), name='signup'),
]
eviews.py:
from django.urls import reverse_lazy
from django.views.generic import CreateView
from .forms import CustomUserCreationForm
class SignUpView(CreateView):
from_class = CustomUserCreationForm
success_url = reverse_lazy('login')
template_name = 'registration/signup.html'
signup.html:
{% extends 'base.html' %}
{% block title %}Sign Up{% endblock title %}
{% block content %}
<h2>Sign Up</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Sign Up</button>
</form>
{% endblock content %}
Tentei alterar os campos forms.py
com:
fields = (
"username",
"email",
"age",)
mas nada a mencionar
O culpado é um erro de digitação:
parafrom_class
form_class
:Mas acho interessante saber por que isso gera esse erro: se você não fornecer um [Django-doc] para um , ele tentará criar seu próprio formulário, para isso ele pode trabalhar com o [Django-doc] , mas para isso ele precisa conhecer o modelo.
.form_class
CreateView
CreateView
modelform_factory(…)
Ele tenta determinar o modelo de três maneiras possíveis: primeiro, verificando se a visualização tem um
.model
atributo, caso contrário, se tem um.object
atributo (poisUpdateView
o formulário pode ser implicado pelo objeto a ser atualizado) e, finalmente, executa o.get_queryset()
método [Django-doc] para obter o modelo doQuerySet
, e como nenhum deles funciona com esteSignUpView
, obtemos esse erro.