【问题标题】:Django Admin for Multiple Django applications多个 Django 应用程序的 Django 管理员
【发布时间】:2020-01-09 18:10:23
【问题描述】:

我一直在开发一个 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 平台上为每个应用程序设置不同的管理站点获得一些帮助,我会很高兴。

【问题讨论】:

    标签: python django django-admin


    【解决方案1】:

    只需将include('myappadminsite.urls') 替换为myappadminsite.urls,因此urls.py 中的行应为:

    path('myapp_admin/', myappadminsite.urls),
    

    这里

    mammothholdingsadminsite = admin.AdminSite('mammothholdingsadminsite')
    

    我认为你需要这样做

    mammothholdingsadminsite = admin.AdminSite(name='mammothholdingsadminsite')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-13
      • 2017-03-11
      • 1970-01-01
      • 1970-01-01
      • 2010-12-05
      • 2016-03-10
      • 2011-01-01
      相关资源
      最近更新 更多