Django admin: Dynami c мульти база данных django admin - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь решить что-то, что является довольно трудным для меня, и у меня слишком много головной боли.

Я хочу иметь одного администратора django с несколькими базами данных.

  • Все базы данных должны работать со всеми моделями, определенными в models.py (завершено django Административный проект).
  • База данных должна быть выбрана из url
  • Если решение не требует перезагрузки сервера Каждый раз мы добавляем новую базу данных ... намного лучше.

Пример:

www.domainname.com/customerA --> Complete Django admin with Database A
www.domainname.com/customerB --> Complete Django admin with Database B
www.domainname.com/customerC --> Complete Django admin with Database C

На данный момент, пытаясь сделать первый подход, у меня есть файл middleware.py с этим:

request_cfg = threading.local()

class MyProjectMiddleware:
    def __call__(self, request):
        request_cfg.URL_MAIN_WORD = request.build_absolute_uri().split("/")[3]
        response = self.get_response(request)
        return response


class MyProjectDatabaseRouter(object):
    def _default_db( self ):
        if hasattr( request_cfg, 'URL_MAIN_WORD' ):
            return request_cfg.URL_MAIN_WORD
        else:
            #this will be an error throwing situation.
            return 'default'

    def db_for_read( self, model, **hints ):
        return self._default_db()

    def db_for_write( self, model, **hints ):
        return self._default_db()        


Затем в urls.py:

from django.conf.urls import url, include
from django.contrib import admin
from django.conf import settings


urlpatterns = [
    url(r'^customerA/'  , admin.site.urls),
    url(r'^customerB/'  , admin.site.urls),
    url(r'^customerC/'  , admin.site.urls)
]

Это более или менее работает, но ....

все ссылки на django admin являются pointint всегда www.domainname.com/customerA.

Это, я думаю, потому что они используют "одинаковые" обратные методы для получения ссылок вместо того, чтобы составлять их из текущего URL.

Any of this urls seem to read from correct database:
www.domainname.com/customerB/...

But results have links pointing to first one:
www.domainname.com/customerA/...

I надеюсь, я хорошо объяснил ... довольно сложно.

Любой супер-мозг может помочь мне решить эту проблему?

Th Анки заранее.

1 Ответ

0 голосов
/ 31 марта 2020

Полностью решено!

Немного сложно объяснить это в посте. XD

...