Django docs はこれを明確に定義しています。
ユーザーに関する追加情報の保存
ユーザーに関連する追加情報を保存したい場合、Django は、この目的のために「ユーザー プロファイル」と呼ばれるサイト固有の関連モデルを指定する方法を提供します。
この機能を利用するには、保存したい追加情報や利用したい追加メソッドのフィールドを持つモデルを定義し、モデルから User モデルに OneToOneField という名前の user を追加します。これにより、ユーザーごとにモデルのインスタンスを 1 つだけ作成できるようになります。例えば:
from django.contrib.auth.models import User
class UserProfile(models.Model):
# This field is required.
user = models.OneToOneField(User)
# Other fields here
accepted_eula = models.BooleanField()
favorite_animal = models.CharField(max_length=20, default="Dragons.")
このモデルが特定のサイトのユーザー プロファイル モデルであることを示すには、設定 AUTH_PROFILE_MODULE に、ドットで区切られた次の項目で構成される文字列を入力します。
ユーザー プロファイル モデルが定義されているアプリケーションの名前 (大文字と小文字を区別) (つまり、アプリケーションを作成するために manage.py startapp に渡された名前)。モデル (大文字と小文字を区別しない) クラスの名前。
たとえば、プロファイル モデルが UserProfile という名前のクラスであり、accounts という名前のアプリケーション内で定義されている場合、適切な設定は次のようになります。
AUTH_PROFILE_MODULE = 'accounts.UserProfile'
ユーザー プロファイル モデルがこのように定義および指定されている場合、各 User オブジェクトには、そのユーザーに関連付けられたユーザー プロファイル モデルのインスタンスを返す get_profile() メソッドが含まれます。
メソッド get_profile() は、プロファイルが存在しない場合、プロファイルを作成しません。User モデルの django.db.models.signals.post_save シグナルのハンドラーを登録する必要があります。ハンドラーで、created が True の場合は、関連するユーザー プロファイルを作成します。
models.py で
django.contrib.auth.models から django.db.models.signals からユーザーをインポート インポート post_save
# definition of UserProfile from above
# ...
def create_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
post_save.connect(create_user_profile, sender=User)