結論
DefaultAccountAdapter
を継承したカスタムクラスを作成し、new_user
関数をオーバーライドすることで新規登録したときに値を設定できます。
前提
- django-allauth機能を使用してサインアップ、もしくはソーシャル認証を通してのアカウント作成ができる状態まで実装できていることとします。
- 使用モジュールの各バージョンは以下です
- Django 3.2.19
- django-allauth 0.54.0
手順
- 認証ユーザーモデルが存在しているアプリフォルダの中に新規でpyファイルを用意して以下のカスタムAdapterクラスを作成します。認証ユーザーモデルには値を設定できるフィールドをもたせるようにカスタマイズしておきます。
users/adapters.py
from allauth.account.adapter import DefaultAccountAdapter
class CustomAccountAdapter(DefaultAccountAdapter):
def new_user(self, request):
user = super().new_user(request)
# Userモデルはカスタマイズしてhogeのフィールドを持たせておきます。
user.hoge = <新規登録するときに設定したい値>
return user
- settings.pyに以下のコードを加えておきます。
project/settings.py
…
INSTALLED_APPS = [
…
# 追加
'django.contrib.sites', #for djnago-allauth
'allauth', #for djnago-allauth
'allauth.account', #for djnago-allauth
'allauth.socialaccount',#for djnago-allauth
]
…
# 追加
AUTHENTICATION_BACKENDS = [
'django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend',
]
…
# 追加
SITE_ID = 1 #django-allauthがsitesフレームワークを使っているため
…
# 追加
ACCOUNT_ADAPTER = 'users.adapters.CustomAccountAdapter'
これで新規登録のときにユーザーモデルに値が設定されます。
以上です。
参考