カスタムユーザーをAbstractBaseUserを使って作成し、adminで表示しようと際のエラー。
[Admin]→[user]→[user detail]
ユーザー詳細の変更をしようとした際に出現
#エラー内容
FieldError at /admin/appauth/user/XXXXXXXXXXXXXXXXXXXX/change/
Unknown field(s) (username) specified for User. Check fields/fieldsets/exclude attributes of class MyUserAdmin.
Djangoでカスタムユーザーモデルを利用しようした際に「えーいなんのこっちゃ精神」でAbstractBaseUserを使った際にちょっとつまずいた。
したかったことは、Adminページでusernameをfieldsetsで表示すること。
class User(AbstractBaseUser, PermissionsMixin):
ググると、stackoverflowでmodelの型関係かと思ったが違った。
username = models.CharField(
_('username'),
max_length=150,
blank=True,
null=True,
unique=True,
help_text=_(
'Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
validators=[username_validator],
error_messages={
'unique': _("そのユーザーネームはすでに存在しています。"),
},
)
blankとか,nullとかをごにょごにょしてみたが、どうも違う。
#Djangoのドキュメントを読みましょう
該当はこの辺り
https://docs.djangoproject.com/ja/2.0/topics/auth/customizing/#using-a-custom-user-model-when-starting-a-project
抜粋:
You should also define a custom manager for your user model. If your user model defines username, email, is_staff, is_active, is_superuser, last_login, and date_joined fields the same as Django's default user, you can just install Django's UserManager; however, if your user model defines different fields, you'll need to define a custom manager that extends BaseUserManager providing two additional methods:
Djangoのdefault userでusernameとか新たに定義したい時はUserManagerを使って、違うfieldとして定義しましょう、的な。
私もよく読めてないので、一度読み返します。
#解決策
とりあえず、別物として定義。
拡張して定義するのが正解だと思うけど認証をメールを使ってそれをusernameとしていることがあるので一時的にこれで対処.
(一度勉強し直す必要アリ)
user_name = models.CharField( #usernameをuser_nameに変更
_('username'),
max_length=150,
blank=True,
null=True,
unique=True,
help_text=_(
'Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
validators=[username_validator],
error_messages={
'unique': _("そのユーザーネームはすでに存在しています。"),
},
)
これで、
.
@admin.register(User)
class MyUserAdmin(UserAdmin):
fieldsets = (
(None, {'fields': ( 'user_name')}),
とかで一旦は解決