"Spass mit Newforms-Admin - Rowlevel-Permissions"超絶意訳
Spass mit Newforms-Admin - Rowlevel-Permissionsを試してみた。
これをマスターするとAdmin Interfaceでのデーター表示を制御できるようになれるので、
Admin-interfaceを有効的に使いたい人は是非試してみてください。
Djangoのリビジョンは8520で試しています。
今回は初期設定を省いて、アプリを編集することから始めます。
プロジェクト名は"myproject"、アプリ名は"weblog"と参考にしたBlogにあわせています。
まずはmodels.pyを編集します。
from django.db import models from django.contrib.auth.models import User # Create your models here. class Entry(models.Model): title = models.CharField(max_length=255) content = models.TexField() author = models.ForeignKey(User) def __unicode__(self): return self.title
保存して
manage.py syncdb
を実行します。
次にweblogディレクトリにadmin.pyを作成して以下のように編集します。
from django.contrib import admin from myproject.weblog.models import Entry class EntryAdmin(admin.ModelAdmin): list_display = ( 'title', 'author', ) admin.site.register(Entry, EntryAdmin)
次に開発サーバーを起動してAdmin-interfaceからデーターを入力してください。
全Entryデーターが表示されています。
これをログインしたユーザーのデーターのみ表示させるにはadmin.pyを更に編集します。
from django.contrib import admin from myproject.weblog.models import Entry class EntryAdmin(admin.ModelAdmin): def queryset(self, request): return self.model._default_manager.filter(author=request.user) list_display = ( 'title', 'author', ) admin.site.register(Entry, EntryAdmin)
Admin-interfaceにアクセスしてみてください。
このように現在ログインしたユーザーのデーターのみ表示されていると思います。
これで終わらせてもいいのですが、一つ問題があります。
このままだと、全データーを見ることが出来るユーザーパーミッションがありません。
全データーを見ることが出来るユーザーパーミッションを作成するにはまずmodels.pyを編集します。
from django.db import models from django.contrib.auth.models import User # Create your models here. class Entry(models.Model): title = models.CharField(max_length=255) content = models.TextField() author = models.ForeignKey(User) class Meta: permissions = ( ('can_view_all', 'Can view all Entries'), ) def __unicode__(self): return self.title
編集し、保存した後必ず
manage.py syncdb
を実行してください。
コンソールにはなにも表示されませんが"auth_permission"のテーブルに設定したデーターが入ります。
この状態でユーザーパーミッションを確認してください。
"weblog | entry | Can view all entries"が追加されています。
そしてユーザーパーミッションを設定してください。
しかし、このままでは機能しません。
もう少しコーディングします。
admin.pyを編集します。
from django.contrib import admin from myproject.weblog.models import Entry class EntryAdmin(admin.ModelAdmin): def queryset(self, request): if request.user.has_perm('weblog.can_view_all'): return self.model._default_manager.get_query_set() return self.model._default_manager.filter(author=request.user) list_display = ( 'title', 'author', ) admin.site.register(Entry, EntryAdmin)
これで"weblog | entry | Can view all entries"のユーザーパーミッションを
持っているユーザーは全てのデーターを表示することが出来ます。
これでAdmin-interfaceをさらに活用できます :-)