2008/08/13

どうやらDjangoの登録方法が変更になったみたい

どうやらDjangoはバージョン0.97から管理画面にModelを登録する方法が変更されているみたいで。今までは対象のModelクラスにAdminクラスメソッドを作る方法を採用していたんですが、Modelクラスに管理画面の設定が混在せざるを得ない仕様はやっぱり完璧主義者には馴染めないものだったんですね。

で、具体的にどうするかっていうと対象のアプリケーションディレクトリに新しくadmin.pyファイルを作成して、以下のように記述します。

#!/usr/bin/env python
#-*- coding:utf-8 -*-
from blogs.models import Entry,Blog,Comment
from django.contrib import admin

##
## The Configuration for Admin.
##
class EntryInline(admin.StackedInline):
model = Entry
extra = 1

class BlogAdmin(admin.ModelAdmin):
inlines = [EntryInline]
list_display = ('title','pub_date','user')
list_filter = ['pub_date']

# registration
admin.site.register(Blog, BlogAdmin)

admin.site.register()の部分で管理画面の登録を行ない、具体的な設定は専用のクラスを新しく作成することで解決します。
しかしこのままではadmin.pyが呼び出されないので、プロジェクトのurls.pyの先頭に以下の2行を加えます。

from django.contrib import admin
admin.autodiscover()

これでadmin.pyが呼び出され、無事管理画面の登録が行なわれるようになりました。

Djangoのオンラインドキュメントではmodels.pyに直接Adminの記述を行なっているんですが、これだとviews.pyとかがmodels.pyをインポートしたときに再びadmin.site.register()が実行されてしまいますので、二重登録のエラーが生じてしまいます。モデルと管理画面の設定を分離するという意味でも、こちらのほうがより便利じゃないかなーと思います。

0 件のコメント: