おそらく、「全てにアクセスできる上位管理者」と、「自分のレコードだけ管理できるユーザ」のような挙動を期待しているのですよね。
独自の認証で request.user を設定できているという前提で説明します。
1. まず、 admin サイトには、 is_staff が True のユーザしか入れません。そのため、全てのユーザの is_staff
を True にしてしまうと、一度ログインしたら、どちらの admin
サイトにもアクセスできてしまい、認証を二つに分ける意味がありません。そのため、上位管理者でないユーザの is_staff は False
にして、それでもログインできる admin サイトを作ってやる必要があります。
2. 次に、何もカスタマイズしていない admin サイトは、通常、データベース上の全てのモデルインスタンスを検索してしまいます。
admin が特定の(例えば、ログイン中のユーザに関連するインスタンスだけ)のモデルインスタンスだけを取り出すようにしてやる必要があります。
そこで、これらの問題を解決するには、
1. django.contrib.admin.sites.AdminSite をカスタマイズして、 is_staff
でなくてもログインできる AdminSitePlus をつくる。
2. django.contrib.admin.options.ModelAdmin をカスタマイズして、 request.user
に関連するオブジェクトだけ検索する ModelAdminPlus を作る。
そして、一般ユーザ向けの admin site を::
site_for_user = AdminSiteFoo()
AdminSitePlus(MyModel, ModelAdminPlus)
のようにして作ればいいわけです。
1. は、 has_permission() をオーバライドします。
2. は、 queryset() をオーバライドしてください::
return super(ModelAdmin, self).queryset().filter(user=request.user)
みたいにすればいいはずです。
2011年7月28日12:37 宮崎 <taro...@gmail.com>:
> --
> ----------------- http://djangoproject.jp/ -----------------
> You received this message because you are subscribed to the Google Groups "django-ja" group.
> To post to this group, send email to djan...@googlegroups.com
> To unsubscribe from this group, send email to django-ja-...@googlegroups.com
> For more options, visit this group at http://groups.google.com/group/django-ja
--
Yasushi Mausda
http://ymasuda.jp/
whosaysni at twitter/gmail