文書の表示以前のリビジョンバックリンク文書の先頭へ この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。 ====== Django Admin サイトを Hack する方法 ====== Django 1.8 時点の手順です。\\ \\ アプリの設定 <code> django_project/django_project/settings.py </code> <code python> # Application definition INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django_app', # <-マイアプリを追加 ) </code> \\ マイ Admin サイトの定義 <code> django_project/django_app/admin.py </code> <code python> # -*- coding: utf-8 -*- from django.contrib import admin from django.contrib.admin import AdminSite # AdminSite をインポート from django_app.models import * # AdminSite を継承した新しいクラスを定義 class MyAdminSite(AdminSite): pass my_admin_site = MyAdminSite(name='admin') class MyModelAdmin(admin.ModelAdmin): pass # MyModel は my_site に登録 my_admin_site.register(MyModel, MyModelAdmin) </code> \\ URLディスパッチの設定 <code> django_project/django_project/urls.py </code> <code python> from django.conf.urls import include, url from django.contrib import admin from django_app.admin import my_admin_site # <- マイ Admin サイトをインポート urlpatterns = [ #url(r'^admin/', include(admin.site.urls)), # マイ Admin サイトにディスパッチされるように設定 url(r'^admin/', include(my_admin_site.urls)), ] </code> ===== これだけだとマイ Admin サイトにグループ、ユーザーが表示されなくなる ===== Django 1.7 から autodiscover() は django.contrib.admin の __init__.py で定義されて、django.contrib.admin.apps.AdminConfig が自動実行するようになった。\\ \\ <code> django/contrib/admin/__init__.py </code> <code python> def autodiscover(): autodiscover_modules('admin', register_to=site) </code> \\ <code> django/contrib/admin/apps.py </code> <code python> class AdminConfig(SimpleAdminConfig): """The default AppConfig for admin which does autodiscovery.""" def ready(self): super(AdminConfig, self).ready() self.module.autodiscover() </code> このままだと default admin site にしかグループ、ユーザーが autodiscover されないので、MyAdminSite にコピーすることにした。\\ <code> django_project/django_app/admin.py </code> <code python> # -*- coding: utf-8 -*- from django.contrib import admin from django.contrib.admin import AdminSite # AdminSite をインポート from django_app.models import * # AdminSite を継承した新しいクラスを定義 class MyAdminSite(AdminSite): pass my_admin_site = MyAdminSite(name='admin') # autodiscover の結果をコピー my_admin_site._registry = admin.site._registry class MyModelAdmin(admin.ModelAdmin): pass # MyModel は my_site に登録 my_admin_site.register(MyModel, MyModelAdmin) </code> python/django/django_admin_hack.txt 最終更新: 2019/08/19 07:03by ともやん