Я разрабатывал проект 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'
Обратите внимание, что у меня есть разные базы данных (включая db_myapp), успешно настроенные в файле setup.py.
.......
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.