Как исправить «SignUpView не хватает набора запросов».
В моем веб-приложении django я пытаюсь создать приложение Newspaper, на главной странице, когда я нажимаю на SIGN UP
кнопку, я получаю ошибку «ImproperlyConfigured at /accounts/signup/»,
Я не смог понять, в чем проблема.
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
и models.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'),
]
и views.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 %}
Я пытался изменить поля в forms.py
с помощью:
fields = (
"username",
"email",
"age",)
но упоминать не о чем
Виной всему опечатка: в from_class
form_class
:
from django.urls import reverse_lazy
from django.views.generic import CreateView
from .forms import CustomUserCreationForm
class SignUpView(CreateView):
form_class = CustomUserCreationForm
success_url = reverse_lazy('login')
template_name = 'registration/signup.html'
Но я думаю, что интересно узнать , почему тогда возникает эта ошибка: если вы не предоставите .form_class
< sup>[Django-doc] для CreateView
, CreateView
попытается создать свой собственный форма, для этого она может работать с modelform_factory(…)
[Django-doc], но для этого ей нужно знать модель.
Он пытается определить модель тремя возможными способами: сначала проверяется, имеет ли представление атрибут .model
, если нет, если у него есть атрибут .object
(для UpdateView
используется форма может подразумеваться объектом для обновления), и, наконец, он запускает .get_queryset()
метод [Django-doc] чтобы получить модель QuerySet
, и поскольку ни один из них не работает с этим SignUpView
, мы, таким образом, получаем эту ошибку.