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

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

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

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

Python

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

Q&A

1回答

1226閲覧

DjangoのUserモデルについて

kait123

総合スコア0

Django

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

Python

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

0グッド

0クリップ

投稿2021/07/05 13:01

前提・実現したいこと

Djangoで従業員を管理するアプリを作っています。
Userモデルを拡張したものを複数使ってログインの処理がしたいです。

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

AUTH_USER_MODEL にてUserモデルを複数指定しても片方しか反映されません。

該当のソースコード

AUTH_USER_MODEL = 'A.User' AUTH_USER_MODEL = 'B.User2'

Django

1#models.py 2#Aフォルダ 3class UserManager(BaseUserManager): 4 use_in_migrations = True 5 6 def _create_user(self, email, password, **extra_fields): 7 email = self.normalize_email(email) 8 user = self.model(email=email, **extra_fields) 9 user.set_password(password) 10 user.save(using=self._db) 11 return user 12 13 def create_user(self, email, password=None, **extra_fields): 14 extra_fields.setdefault('is_staff', True) 15 extra_fields.setdefault('is_superuser', False) 16 return self._create_user(email, password, **extra_fields) 17 18 def create_superuser(self, email, password, **extra_fields): 19 extra_fields.setdefault('is_staff', True) 20 extra_fields.setdefault('is_superuser', True) 21 22 if extra_fields.get('is_staff') is not True: 23 raise ValueError('Superuser must have is_staff=True.') 24 if extra_fields.get('is_superuser') is not True: 25 raise ValueError('Superuser must have is_superuser=True.') 26 27 return self._create_user(email, password, **extra_fields) 28 29class User(AbstractBaseUser, PermissionsMixin): 30 uuid = models.UUIDField(default=uuid.uuid4, primary_key=True, editable=False) 31 username_validator = UnicodeUsernameValidator() 32 33 username = models.CharField( 34 _('username'), 35 max_length=150, 36 blank=True, 37 null=True, 38 help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'), 39 validators=[username_validator], 40 error_messages={ 41 'unique': _("A user with that username already exists."), 42 }, 43 ) 44 email = models.EmailField(_('メールアドレス'), unique=True,null=True) 45 46 is_staff = models.BooleanField( 47 _('staff status'), 48 default=True, 49 help_text=_('Designates whether the user can log into this admin site.'), 50 ) 51 52 is_active = models.BooleanField( 53 _('active'), 54 default=True, 55 help_text=_( 56 'Designates whether this user should be treated as active. ' 57 'Unselect this instead of deleting accounts.' 58 ), 59 ) 60 61 objects = UserManager() 62 63 USERNAME_FIELD = 'email' 64 REQUIRED_FIELDS = [] 65 66 class Meta: 67 db_table = 'User' 68 verbose_name = _('user') 69 verbose_name_plural = _('ユーザー') 70 71 def clean(self): 72 super().clean() 73 self.email = self.__class__.objects.normalize_email(self.email) 74 75 def email_user(self, subject, message, from_email=None, **kwargs): 76 send_mail(subject, message, from_email, [self.email], **kwargs) 77 78 def get_uuid(self): 79 return self.uuid

Django

1 #models.py 2 #Bフォルダ 3 #上記と殆ど同じため割愛 4 class Meta: 5 db_table = 'User2' 6 verbose_name = _('user') 7 verbose_name_plural = _('ユーザー')

試したこと

AUTH_USER_MODEL =["A.User","B.User2"]
などを試したが反映されず

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

setteing.py
|A--models.py(A.User)
|B--models.py(B.User2)

Django version 3.1.6

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

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

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

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

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

guest

回答1

0

Djangoで、認証(ログインやサインアップ、get_user_modelなど)に使用できるユーザーモデルは1つだけです。

python

1AUTH_USER_MODEL = 'A.User' 2AUTH_USER_MODEL = 'B.User2'

と書いても、後ろの方(B.User2)が適用されます。

投稿2021/07/13 21:22

編集2023/07/25 23:10
ForestSeo

総合スコア2720

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問