前提・実現したいこと
複数ユーザーが登録できるブログアプリを作成しようと考え、その中で、オーソドックスなユーザー登録機能を実装しようとしています。
(今後、拡張ユーザーモデルを利用しようと考えていますが、現時点では、class-based viewを使って、できるだけシンプルに実装しておければと考えています。)
発生している問題・エラーメッセージ
関連するサイトや本を読んで、ユーザー登録機能を一通り実装したと思ったのですが、下記のエラーが発生しています。
解決方法について教示いただければ幸いです。
ImproperlyConfigured at /signup/ SignupView is missing a QuerySet. Define SignupView.model, SignupView.queryset, or override SignupView.get_queryset(). Request Method: GET Request URL: http://127.0.0.1:8000/signup/ Django Version: 3.1.2 Exception Type: ImproperlyConfigured Exception Value: SignupView is missing a QuerySet. Define SignupView.model, SignupView.queryset, or override SignupView.get_queryset(). Exception Location: /opt/anaconda3/envs/django-env/lib/python3.9/site-packages/django/views/generic/detail.py, line 69, in get_queryset Python Executable: /opt/anaconda3/envs/django-env/bin/python Python Version: 3.9.0 Python Path: ['/Users/user/Documents/django_work/reportproject', '/opt/anaconda3/envs/django-env/lib/python39.zip', '/opt/anaconda3/envs/django-env/lib/python3.9', '/opt/anaconda3/envs/django-env/lib/python3.9/lib-dynload', '/opt/anaconda3/envs/django-env/lib/python3.9/site-packages']
該当のソースコード
reportproject/accounts/views.py
python
1from django.contrib.auth import login 2from django.urls import reverse_lazy 3from django.views.generic import CreateView 4 5from .forms import SignupForm 6 7 8class SignupView(CreateView): 9 from_class = SignupForm 10 success_url = reverse_lazy('reportpost:list') 11 template_name = 'signup.html' 12 13 def from_valid(self, form): 14 # self.objectにsave()されたユーザーオブジェクトが格納される 15 valid = super().form_valid(form) 16 login(self.request, self.object) 17 return valid
reportproject/accounts/urls.py
python
1from django.contrib import admin 2from django.urls import path 3from django.contrib.auth import views as auth_views 4from . import views 5 6app_name = 'accounts' 7urlpatterns = [ 8 path('login/', auth_views.LoginView.as_view(template_name='login.html'), name='login'), 9 path('logout/', auth_views.LogoutView.as_view(), name='logout'), 10 path('signup/', views.SignupView.as_view(), name='signup'), 11]
reportproject/accounts/forms.py
python
1from django import forms 2from django.contrib.auth.forms import UserCreationForm 3from django.contrib.auth.models import User 4 5class SignupForm(UserCreationForm): 6 class Meta: 7 model = User 8 fields = ('username', 'email', 'password1', 'password2')
※ なお、**reportproject/accounts/**内の、models.py
にはデフォルト以上に何も記述しておりません。
reportproject/templates/signup.html
html
1{% extends "base.html" %} 2{% load bootstrap4 %} 3 4{% block title %}ユーザー登録{% endblock %} 5 6{% block content %} 7 8<h2>ユーザー登録</h2> 9<form class="mt-4 mb-3" action="" method="POST"> 10 {% csrf_token %} 11 {% bootstrap_form form %} 12 <input type="submit" class="btn btn-block btn-outline-primary" value="ユーザー登録"> 13</form> 14 15{% endblock %}
試したこと
エラーメッセージを参考に、 SignupView
クラスにget_query
関数を入れようとしましたが、あまり解決に向かっているようには思えません。
reportproject/accounts/views.py (暫定的に変更)
python
1from django.contrib.auth import login 2from django.urls import reverse_lazy 3from django.views.generic import CreateView 4# 暫定 5from django.contrib.auth.models import User 6 7from .forms import SignupForm 8 9 10class SignupView(CreateView): 11 from_class = SignupForm 12 success_url = reverse_lazy('reportpost:list') 13 template_name = 'signup.html' 14 15 def get_queryset(self): # 暫定 16 return User.objects.all() 17 18 def from_valid(self, form): 19 # self.objectにsave()されたユーザーオブジェクトが格納される 20 valid = super().form_valid(form) 21 login(self.request, self.object) 22 return valid
新たに出現したエラーメッセージ
python
1mproperlyConfigured at /signup/ 2Using ModelFormMixin (base class of SignupView) without the 'fields' attribute is prohibited. 3Request Method: GET 4Request URL: http://127.0.0.1:8000/signup/ 5Django Version: 3.1.2 6Exception Type: ImproperlyConfigured 7Exception Value: 8Using ModelFormMixin (base class of SignupView) without the 'fields' attribute is prohibited. 9Exception Location: /opt/anaconda3/envs/django-env/lib/python3.9/site-packages/django/views/generic/edit.py, line 96, in get_form_class 10Python Executable: /opt/anaconda3/envs/django-env/bin/python 11Python Version: 3.9.0 12Python Path: 13['/Users/user/Documents/django_work/reportproject', 14 '/opt/anaconda3/envs/django-env/lib/python39.zip', 15 '/opt/anaconda3/envs/django-env/lib/python3.9', 16 '/opt/anaconda3/envs/django-env/lib/python3.9/lib-dynload', 17 '/opt/anaconda3/envs/django-env/lib/python3.9/site-packages']
補足情報(FW/ツールのバージョンなど)
conda 4.9.2
django 3.1.2
python 3.9.0
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。