2011-10-24

Django1.3の管理サイトが便利すぎる



Djangoの管理コンソールは昔から便利だと思っていたが、久しぶりに最新版の1.3.1を試してみたら、管理コンソールが進化してものすごく便利になっていた。

とくに、ユーザが自分で生成したオブジェクトだけを表示・編集できるようになったことはすばらしい。
バージョン1.3がリリースされてから、かなり時間が経つが、ドキュメントが日本語化されていないようなので、このことを知らない人もいるかもしれない。
以前の管理コンソールは、すべてのオブジェクトにアクセス可能なサイト運営者用にしか使えない印象だったが、いまはサイトにユーザ登録した利用者用にも使えそうだ。

ユーザが生成したオジェクトのみを管理サイトでアクセス可能にするには、django.contrib.admin.ModelAdminを継承してたクラスを定義して、queryset、has_add_permission、has_change_permission、has_delete_permissionなどをオーバーライドする。querysetをオーバーライドするだけで、表示を絞り込むことはできるが、has_add_permissionなどで権限を正しく設定しておかないといけない。
ドロップダウンリストなどに他のユーザのオブジェクトが表示されてしまうのを直したい場合は、さらに、formfield_for_foreignkeyなどをオーバーライドすればよい。

Djangoの管理サイトは、以前よりもさらに便利で強力になった。しかし、もちろんすべてのニーズを満たすというわけではない。
たとえば、list_filterで絞り込みを設定した場合にも、他のユーザのオブジェクトが表示されてしまうのだが、これを防ぐ簡単な手立てはどうやらなさそうだ。
また、DBのテーブルを列挙するページ構成は、ユーザにとって使い勝手が悪い場合が多そうだ。ページ構成は、オブジェクトの階層構造に対応していることが望ましいと思うのだが、これを実現するには割りと大掛かりなカスタマイズが必要になると思われる。