質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

838閲覧

django アカウント作成エラー

django

総合スコア19

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/07/20 10:22

編集2019/07/20 12:35

前提・実現したいこと

現在、ネットの情報を見て
アカウント作成の機能を追加しようとしています。
試しに、アカウント作成をしようとしました。
ですがエラーが発生して、何が原因かがわかりません。

調べて以下の文を追加しましたがエラーが変わりません。
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>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

form_classをformsから参照すれば大丈夫でした。

投稿2019/07/22 13:46

django

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問