django でユーザーモデルを操作する¶
Last Change: | 11-Apr-2016. |
---|
:Author : qh73xe :Reference: https://docs.djangoproject.com/ja/1.9/topics/auth/customizing/
ユーザーモデルの拡張¶
Django でアプリケーションを作成している際に結構便利なのが、ユーザー周りの操作を 自動で作成しておいてくれることです。
一方で自動化されているものだけではなく、もっと自由にユーザーモデルを定義したい場合もあるかと思います
Django において ユーザーモデルに登録したい情報を増やしたい場合, もっとも単純な方法は ユーザーモデルと onetoone の関係をもったモデルを定義してしまうことです。
以下の例では何か社員を登録する様なモデルを作成している場合に部署情報を追加したいという状況設定でモデルを作成しています。
このようなモデルを生成したうえで以下のように使っていきます。
1 2 | >>> u = User.objects.get(username='fsmith')
>>> freds_department = u.employee.department
|
大抵の問題はこのように解決を行うことが可能かと思います。
Admin に登録する¶
上記のようにユーザーモデルを拡張した場合、直接 admin からすべて登録できた方が楽かと思います。 以下のような admin.py を作成すると良いでしょう。
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.models import User
from my_user_profile_app.models import Employee
class EmployeeInline(admin.StackedInline):
model = Employee
can_delete = False
verbose_name_plural = 'employee'
# Define a new User admin
class UserAdmin(BaseUserAdmin):
inlines = (EmployeeInline, )
# Re-register UserAdmin
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
view 内で ユーザーモデルを利用する¶
現在のログインユーザーを取得する¶
ユーザー情報をサイト内に表示する際には基本的に現在のユーザーの情報のみを使用する ことが多いかと思います。
上記のような場合、ユーザー情報は以下のように取得します。
警告
当然、ユーザーログインが修了していることを前提とします
1 2 3 | def sample_view(request):
current_user = request.user
print current_user.id
|