Django で User モデルの継承について
こちらをオススメします。
以下の記事は古いです。
Django の User モデルは、そのまま継承することはできません。
この理由は User モデルは Auth というデフォルトでついているアプリ内のモデルだからです。なので、アプリ内のモデルを拡張してあげればいいのですが、もとになる機能なので直接は触らせてくれ無いと言う訳です。
解決策
Case 1. Django 1.4 以前の場合
→ User と OneToOneField の関係にあるモデル(ex, UserProfile)を作成する。
Case 2. Django 1.5 以降の場合
→ AbstractUser を継承させたモデルを使う。
Case 1. Django 1.4 以前の場合
やり方としては、
Step1. User と OneToOneField の関係にあるモデル(ex, UserProfile)を作成する。
Step2. UserProfile は User モデルが追加されたときに自動で、対になる UserProfile モデルが生成されるように設定する。
Step3. Django にわかるように AUTH_PROFILE_MODULE を設定する。
といったところでしょうか。
自分は、1.6 を使っているので理解していません。
Storing additional information about users
Django ユーザープロファイルを作成 - cloverrose's blog
Case 2. Django 1.5 以降の場合
用意されている AbstractUser モデルを実装するということをしています。
Step1. 自分の Auth アプリを新しく作る。
$ python manage.py startapp corporate_auth
請注意
専用の認証アプリを作ったほうがきれいかなと思います。
例えば、いま hello アプリを開発していたとします。勿論、新しく Auth アプリケーションを定義しないで hello アプリ内の model.py で AbstractUser を実装することもできます。
しかし、それをした場合、新しく別のアプリ、例えば goodbye アプリを開発する際に hello アプリ内の AbstractUser を実装した Emploee モデルを import することになります。
また AbstractUser を実装した場合、admin サイトを見てください。Auth 欄から User が消えているはずです。
Step2. AbstractUser を実装する。
from django.contrib.auth.models import AbstractUser class Emploee(AbstractUser): company= models.ForeignKey(Company,related_name='jointed_company', help_text=ugettext_lazy('所属法人'))
Extending Django’s default User
Step3. AUTH_USER_MODEL に AbstractUser を実装させたクラスを登録するように settings.py に書き込む
AUTH_USER_MODEL = 'corporate_auth.Emploee'
python - Django 1.6 AbstractUser m2m models validation error - Stack Overflow
Step4. admin サイトに登録するように corporate_auth/admin.py に書き込む
from django.contrib import admin import corporate_auth admin.site.register(corporate_auth.models.Emploee)
請注意
もし Group モデルを拡張しようと考えている場合は admin.site.unregister(Group) をいれてあげる必要があります。
Step5. 呼び出して使ってあげる。
from corporate_auth.models import Emploee