django admin 使っていこうぜ!
まいど、東京に来ても関西弁が抜けないstbtkhrです。
今日は小ネタ的な、備忘録的なことを書いていきます。
カスタムユーザーAdminでadmin.ModelAdminを使うのはダメ
みなさんdjnagoでカスタムユーザーって使っていますか?
いろんな記事を見ていると、admin構成時以下のようにしている記事が見受けられました。
ちなみにアプリ名はaccountにしています。
from django.contrib import admin
from .. import models
@admin.register(models.User)
class UserAdmin(admin.ModelAdmin):
list_display = (
'id',
'email',
'username',
)
# ...etc...
このadmin.ModelAdminを継承すると実はアドミンのuser画面のdjango本来の実力をだせません。
特に顕著な違いは、ここのユーザー画面を出した時です。
admin.ModelAdminを継承した場合のユーザー画面は以下の通り!
現状のままだとpdkdf2.....と続いているのがわかりますね?これはハッシュ暗号化されているということをさします。
パスワードを変更して保存してみてください。
一応仮にtestと書いておこう。そして保存!
・・・あれれ?ハッシュ化されてへんやん・・・。DB上も他のパスワードとみても全然ちがいます。
では、どうすべきか
これはなぜ起こるのかというと、継承先のadmin.ModelAdminのformがデフォルトのformを使っているからです。
admin.ModelAdminだけでは、django上だとユーザー画面もただのDB上の一画面でしかないのです。
ちなみにdjango_adminのpasswordは、charFieldでDBに記録されます。
特にユーザー用にカスタマイズされたfieldsではないので、djangoのDB操作もただの文字として認識するだけです。
では、継承先をUserAdminにしてみてください。正確には、django.contrib.auth.adminの中にあるUserAdminです。
from django.contrib import admin
# ↓追加
from django.contrib.auth.admin import UserAdmin
from .. import models
@admin.register(models.User)
# ↓変更
class UserAdmin(UserAdmin):
# 省略
パスワード専用の画面になっているでしょう!
パスワードもハッシュ化されて保存できるはずです!
これで、また一つdjangoの知識が深まりました!
また機会あれば更新していきます。