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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

0回答

830閲覧

Djangoの会員登録機能にテストユーザーとしてワンクリックログインできるようにしたい。

nre

総合スコア35

Django

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/10/14 08:26

前提・実現したいこと

【結論】
djangoで開発したwebサイト(会員登録機能付き)に、
ワンクリックでログインできるテストユーザー機能を実装したいです。

【概要】
通常はニックネームとメールアドレス、パスワード、氏名を入力する事で会員登録を行い、
自分のプロフィールを公開する使用となっております。
今回実装したいテストユーザー機能は
上記の手順を行う事なく会員登録したユーザーと同じ権限を与えられる様にしたいです。

発生している問題・エラーメッセージ

テストユーザーでログインしたものの、
プロフィール情報を登録しようとすると下記のエラーが出てしまいます。

Django

1#web画面 2IntegrityError at /test_login/ 3UNIQUE constraint failed: register_user.email 4 5#コンソール 6django.db.utils.IntegrityError: UNIQUE constraint failed: register_user.email

該当のソースコード

django

1#views.py 2 3class TestCreate(generic.CreateView): 4 """テストユーザー""" 5 template_name = 'register/user_form.html' 6 form_class = UserUpdateForm 7 8 def form_valid(self,form): 9 user = form.save(commit=False) 10 user.is_active = True 11 user.save() 12 13 return redirect('register:user_detail', pk=user.pk) 14

django

1#app/urls.py 2 3from django.urls import path 4from . import views 5 6app_name = 'register' 7 8urlpatterns = [ 9 path('test_login/', views.TestCreate.as_view(), name='test_login'), 10 #他省略 11] 12

django

1#models.py 2 3class User(AbstractBaseUser, PermissionsMixin): 4 """カスタムユーザーモデル.""" 5 6 email = models.EmailField(_('email address'), unique=True) 7 first_name = models.CharField(_('first name'), max_length=30, blank=True) 8 last_name = models.CharField(_('last name'), max_length=150, blank=True) 9 nick_name = models.CharField(_('ニックネーム'), max_length=30, blank=False) 10 created_at = models.DateTimeField(default=timezone.now) 11 12 13 is_staff = models.BooleanField( 14 _('staff status'), 15 default=False, 16 help_text=_( 17 'Designates whether the user can log into this admin site.'), 18 ) 19 is_active = models.BooleanField( 20 _('active'), 21 default=True, 22 help_text=_( 23 'Designates whether this user should be treated as active. ' 24 'Unselect this instead of deleting accounts.' 25 ), 26 ) 27 date_joined = models.DateTimeField(_('date joined'), default=timezone.now) 28 29 objects = UserManager() 30 31 EMAIL_FIELD = 'email' 32 USERNAME_FIELD = 'email' 33 REQUIRED_FIELDS = [] 34 35 class Meta: 36 verbose_name = _('user') 37 verbose_name_plural = _('users') 38 39 def get_full_name(self): 40 """Return the first_name plus the last_name, with a space in 41 between.""" 42 full_name = '%s %s' % (self.first_name, self.last_name) 43 return full_name.strip() 44 45 def get_short_name(self): 46 """Return the short name for the user.""" 47 return self.first_name 48 49 def email_user(self, subject, message, from_email=None, **kwargs): 50 """Send an email to this user.""" 51 send_mail(subject, message, from_email, [self.email], **kwargs) 52 53 @property 54 def username(self): 55 """username属性のゲッター 56 57 他アプリケーションが、username属性にアクセスした場合に備えて定義 58 メールアドレスを返す 59 """ 60 return self.email 61

試したこと

テーブルにemailの情報がすでに入っているのかと思い、
migrationsファイルの中身を削除し再度、メイクマイグレーション、マイグレートしましたが同じ結果となりました。
また、UNIQUE制約をFalseにすると同じメールアドレスで登録できる事になってしまうので

補足情報(FW/ツールのバージョンなど)

こちらの機能は下記のサイトを元に作成しており、
テストユーザーはis_activeをTrueにしたものとなっております。
https://blog.narito.ninja/detail/38/

UNIQUE制約をFalseにすると同じメールアドレスで登録できる事になってしまうので、
unique=Trueのままがいいです。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問