python - 多个 Django 应用程序的 Django 管理员
问题描述
我一直在使用多个数据库开发一个包含多个应用程序的 Django 项目。我需要的是每个应用程序的不同管理站点。例如,myapp 应该使用一个只属于它自己的管理站点。换句话说,我需要在浏览器上使用类似http://127.0.0.1:8000/myapp_admin/的东西来访问管理站点上的相关数据库。
这是我到目前为止所做的:
class MultiDBModelAdmin(admin.ModelAdmin):
# A handy constant for the name of the alternate database.
using = 'db_myapp'
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().get_queryset(request).using(self.using)
def formfield_for_foreignkey(self, db_field, request, **kwargs):
# Tell Django to populate ForeignKey widgets using a query
# on the 'other' database.
return super().formfield_for_foreignkey(db_field, request, using=self.using, **kwargs)
def formfield_for_manytomany(self, db_field, request, **kwargs):
# Tell Django to populate ManyToMany widgets using a query
# on the 'other' database.
return super().formfield_for_manytomany(db_field, request, using=self.using, **kwargs)
在 admin.py 文件中,我有这个:
mammothholdingsadminsite = admin.AdminSite('mammothholdingsadminsite')
mammothholdingsadminsite.register(User, MultiDBModelAdmin)
在 urls.py 文件中,我有这个:
from django.urls import path, include
from django.contrib import admin, auth
from myapp.admin import myappadminsite
urlpatterns = [
path('admin/', admin.site.urls),
path('myapp/', include('myapp.urls')),
path('oauth/', include('social_django.urls', namespace='social')),
path('myapp_admin/', include('myappadminsite.urls')),
]
但我最终遇到以下错误:
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 965, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'mammothholdingsadminsite'
请注意,我在 setup.py 文件中成功设置了不同的数据库(包括 db_myapp)。
.......
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
'db_myapp': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'testdb',
'USER': 'root',
'PASSWORD': 'mypassword',
'HOST': 'myhost', #that is my amazon end point that I removed for now
'PORT': '3306',
}
}
DATABASE_ROUTERS = ['myapp.dbRouter.MyAppDbRouter',]
.......
.......
如果我能在 django 平台上为每个应用程序设置不同的管理站点获得一些帮助,我会很高兴。
解决方案
只需替换include('myappadminsite.urls')
为myappadminsite.urls
,因此中的行urls.py
应为:
path('myapp_admin/', myappadminsite.urls),
和这里
mammothholdingsadminsite = admin.AdminSite('mammothholdingsadminsite')
我认为你需要这样做
mammothholdingsadminsite = admin.AdminSite(name='mammothholdingsadminsite')
推荐阅读
- python - Tornado 分析请求
- django - 在 Windows 中安装 gettext:找不到 msguniq。确保您安装了 GNU gettext 工具 0.15 或更新版本
- .net - VB.NET DLL“ActiveX 组件无法创建对象”
- visual-studio - Visual Studio 2017 不兼容项目
- r - RShiny 计算进度指示器
- nativescript - Nativescript 应用程序未读取 http/json 数据
- adobe - 如何在 adobe captivate 中插入 .html 文件?
- ruby-on-rails - 用于更改文件名的 shell 脚本
- docker - 如何在两个 docker 容器(mssql 和 .net core app)之间进行通信
- java - 从 Android 麦克风获取频率