前提・実現したいこと
現在、ネットの情報を見て
アカウント作成の機能を追加しようとしています。
試しに、アカウント作成をしようとしました。
ですがエラーが発生して、何が原因かがわかりません。
調べて以下の文を追加しましたがエラーが変わりません。
User = get_user_model()
発生している問題・エラーメッセージ
Internal Server Error: /accounts/signup/ Traceback (most recent call last): File "/anaconda3/envs/active/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/anaconda3/envs/active/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response response = self.process_exception_by_middleware(e, request) File "/anaconda3/envs/active/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/anaconda3/envs/active/lib/python3.7/site-packages/django/views/generic/base.py", line 71, in view return self.dispatch(request, *args, **kwargs) File "/anaconda3/envs/active/lib/python3.7/site-packages/django/views/generic/base.py", line 97, in dispatch return handler(request, *args, **kwargs) File "/anaconda3/envs/active/lib/python3.7/site-packages/django/views/generic/edit.py", line 172, in post return super().post(request, *args, **kwargs) File "/anaconda3/envs/active/lib/python3.7/site-packages/django/views/generic/edit.py", line 141, in post if form.is_valid(): File "/anaconda3/envs/active/lib/python3.7/site-packages/django/forms/forms.py", line 185, in is_valid return self.is_bound and not self.errors File "/anaconda3/envs/active/lib/python3.7/site-packages/django/forms/forms.py", line 180, in errors self.full_clean() File "/anaconda3/envs/active/lib/python3.7/site-packages/django/forms/forms.py", line 383, in full_clean self._post_clean() File "/anaconda3/envs/active/lib/python3.7/site-packages/django/contrib/auth/forms.py", line 107, in _post_clean super()._post_clean() File "/anaconda3/envs/active/lib/python3.7/site-packages/django/forms/models.py", line 403, in _post_clean self.instance.full_clean(exclude=exclude, validate_unique=False) File "/anaconda3/envs/active/lib/python3.7/site-packages/django/db/models/base.py", line 1188, in full_clean self.clean() File "/anaconda3/envs/active/lib/python3.7/site-packages/django/contrib/auth/models.py", line 339, in clean self.email = self.__class__.objects.normalize_email(self.email) File "/anaconda3/envs/active/lib/python3.7/site-packages/django/db/models/manager.py", line 188, in __get__ cls._meta.swapped, AttributeError: Manager isn't available; 'auth.User' has been swapped for 'users.User'
該当のソースコード
form
1from django.contrib.auth.forms import UserCreationForm 2 3from django.contrib.auth import get_user_model 4 5User = get_user_model() 6 7 8 9 10class SignUpForm(UserCreationForm): 11 """ユーザー登録用フォーム""" 12 13 class Meta: 14 model = User 15 fields = ('email',) 16 17 def __init__(self, *args, **kwargs): 18 super().__init__(*args, **kwargs) 19 for field in self.fields.values(): 20 field.widget.attrs['class'] = 'form-control' 21 22 def clean_email(self): 23 email = self.cleaned_data['email'] 24 User.objects.filter(email=email, is_active=False).delete() 25 return email
view
1 2class SignUp(CreateView): 3 form_class = UserCreationForm 4 template_name = "accounts/signup.html" 5 success_url = reverse_lazy('') 6 7 def form_valid(self, form): 8 user = form.save(commit=False) 9 user.is_active = False 10 user.save() 11 # アクティベーションURLの送付 12 current_site = get_current_site(self.request) 13 #domeinの取得 14 domain = current_site.domain 15 context = { 16 'protocol': self.request.scheme, 17 'domain': domain, 18 'token': dumps(user.pk), 19 'user': user, 20 } 21 #templateを呼び出す 22 subject = render_to_string('mail/create/subject.txt', context) 23 message = render_to_string('mail/create/message.txt', context) 24 25 user.email_user(subject, message) 26 return redirect('accounts:SignUpDone') 27 28 29class SignUpDone(TemplateView): 30 """ユーザー仮登録したよ""" 31 template_name = 'accounts/signupdone.html' 32 33class SignUpComplete(TemplateView): 34 """メール内URLアクセス後のユーザー本登録""" 35 template_name = 'accounts/signupcomplete.html' 36 timeout_seconds = getattr(settings, 'ACTIVATION_TIMEOUT_SECONDS', 60*60*24) # デフォルトでは1日以内 37 38 def get(self, request, **kwargs): 39 """tokenが正しければ本登録.""" 40 token = kwargs.get('token') 41 try: 42 user_pk = loads(token, max_age=self.timeout_seconds) 43 44 # 期限切れ 45 except SignatureExpired: 46 return HttpResponseBadRequest() 47 48 # tokenが間違っている 49 except BadSignature: 50 return HttpResponseBadRequest() 51 52 # tokenは問題なし 53 else: 54 try: 55 user = User.objects.get(pk=user_pk) 56 except User.DoesNotExist: 57 return HttpResponseBadRequest() 58 else: 59 if not user.is_active: 60 # 問題なければ本登録とする 61 user.is_active = True 62 user.save() 63 return super().get(request, **kwargs) 64 65 return HttpResponseBadRequest()
html
1<form action="" method="POST"> 2 {{ form.non_field_errors }} 3 {% for field in form %} 4 <div class="form-group"> 5 <label for="{{ field.id_for_label }}">{{ field.label_tag }}</label> 6 {{ field }} 7 {{ field.errors }} 8 </div> 9 {% endfor %} 10 {% csrf_token %} 11 <button type="submit" class="btn btn-primary btn-lg">送信</button> 12</form>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。