フレームワークって、決まったことをやる分にはめちゃくちゃ速く開発出来ちゃうけど、ほんのちょっとここをこうしたいって時に、仕様が理解できてないと、ものすごい時間と労力を取られることがある、、。
Djangoで作成したアプリのモデルを定義すると、管理画面上に自動的にレジスターが出てくるので非常に便利。
でもそのレジスターを一覧表示した時、外部キー(foreignkey)で紐づけたユーザ情報が、デフォルトだとユーザ名(ログインID)になってしまう。
せっかくカスタムユーザモデルを定義したのだから、ここにフルネームを出したい。
カスタムユーザモデルを修正。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
: class User(AbstractBaseUser, PermissionsMixin): : (省略) : #フルネーム(氏名)定義。ユニークじゃないと怒られるのでユニークにする full_name = models.CharField(_('氏名'), max_length=150, blank=True, unique=True) : #フルネームをユーザネームフィールドとして扱う #USERNAME_FIELD = 'username' USERNAME_FIELD = 'full_name' : (以下略) |
マイグレーション忘れずに。
するとアプリのレジスター画面で 以下のように表示される。
とりあえずこれでOK。
ただしUSERNAME_FIELDはユーザのレジスターやアクティベーションに関係してくるので、外部向けの新規ユーザ登録画面などを作った時に、弊害が出てくる可能性も、、、。
もうちょっと勉強が必要かな。
6/13追記:
さっそく弊害出ました。フルネームがユーザ名として扱われるようになったため、管理画面にログインする際のIDもフルネームで判定されるようになってしまいました。元に戻しました、、、。