【问题标题】:Django admin: Dynamic multi database django adminDjango admin:动态多数据库 django admin
【发布时间】:2020-07-03 21:56:00
【问题描述】:

我正在尝试解决一些对我来说相当困难的事情,而用户界面让我非常头疼。

我想要一个拥有多个数据库的 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 上的所有链接都指向 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/...

我希望我解释得很好……这很复杂。

有什么超脑能帮我解决这个问题吗?

提前致谢。

【问题讨论】:

    标签: python django database django-admin


    【解决方案1】:

    完全解决了!

    在帖子中解释它有点复杂。呵呵

    【讨论】:

      猜你喜欢
      • 2010-10-13
      • 2018-03-11
      • 1970-01-01
      • 2015-01-03
      • 2012-05-29
      • 1970-01-01
      • 2011-08-13
      • 2011-12-21
      • 2011-05-16
      相关资源
      最近更新 更多