【发布时间】:2013-07-31 21:50:27
【问题描述】:
我需要在 Django Admin 中管理多个数据库。我的两个名为“本地”和“服务器”的数据库在设置文件中定义。由于 Django 不允许多次添加具有不同 ModelAdmin 的同一模型,因此我创建了两个 admin.AdminSite 实例。
这是admin.py文件的代码:
from core.models import MyModel
from django.contrib import admin
server_site = admin.AdminSite('server')
local_site = admin.AdminSite('local')
class MultiDBModelAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
# Tell Django to save objects to the 'other' database.
obj.save(using=self.using)
def delete_model(self, request, obj):
# Tell Django to delete objects from the 'other' database
obj.delete(using=self.using)
def get_queryset(self, request):
# Tell Django to look for objects on the 'other' database.
return super(MultiDBModelAdmin1, self).get_queryset(request).using(self.using)
def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
# Tell Django to populate ForeignKey widgets using a query
# on the 'other' database.
return super(MultiDBModelAdmin1, self).formfield_for_foreignkey(db_field, request=request, using=self.using, **kwargs)
def formfield_for_manytomany(self, db_field, request=None, **kwargs):
# Tell Django to populate ManyToMany widgets using a query
# on the 'other' database.
return super(MultiDBModelAdmin1, self).formfield_for_manytomany(db_field, request=request, using=self.using, **kwargs)
class MultiDBModelAdmin1(MultiDBModelAdmin):
# A handy constant for the name of the alternate database.
using = 'server'
class MultiDBModelAdmin2(MultiDBModelAdmin):
# A handy constant for the name of the alternate database.
using = 'local'
local_site.register(MyModel, MultiDBModelAdmin1)
server_site.register(MyModel, MultiDBModelAdmin2)
这里是urls.py 文件:
from django.conf.urls import patterns, include, url
from core.admin import local_site, server_site
urlpatterns = patterns('',
url(r'^admin/', include(local_site.urls)),
url(r'^serveradmin/', include(server_site.urls)),
[...]
)
我可以使用admin/ 和serveradmin/ URL 访问管理面板,但是内容是相同的:管理面板使用的是“本地”数据库,而不管我访问的是哪个管理面板。 Django怎么不区分这两者?
【问题讨论】:
标签: django django-admin