【问题标题】:exposing multiple databases in django admin在 django admin 中公开多个数据库
【发布时间】:2016-09-19 08:31:48
【问题描述】:

我的用例要求我在 django 项目的管理站点中公开多个数据库。是按照这个链接做的吗:https://docs.djangoproject.com/en/dev/topics/db/multi-db/#exposing-multiple-databases-in-django-s-admin-interface

这是使用的代码:

class MultiDBModelAdmin(admin.ModelAdmin):
# A handy constant for the name of the alternate database.
using = 'other'

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(MultiDBModelAdmin, self).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(MultiDBModelAdmin, self).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(MultiDBModelAdmin, self).formfield_for_manytomany(db_field, request, using=self.using, **kwargs)

然后:

admin.site.register(Author, MultiDBModelAdmin)
admin.site.register(Publisher, PublisherAdmin)

othersite = admin.AdminSite('othersite')
othersite.register(Publisher, MultiDBModelAdmin)

该示例的文档说明:该示例设置了两个管理站点。在第一个站点上,Author 和 Publisher 对象被公开; Publisher 对象有一个表格内联显示该出版商出版的书籍。第二个网站只公开发布者,没有内联。

我似乎在任何地方都找不到的是:我如何访问另一个“网站”?必须使用什么 URL 来查看在其他“站点”中公开的表格?应该是直截了当的,但我似乎在任何地方都找不到。

【问题讨论】:

    标签: python django django-admin


    【解决方案1】:

    您需要为您的管理站点添加一个 url 模式,类似于您启用常规站点的方式:

    # urls.py
    from django.conf.urls import url
    from django.contrib import admin
    from myapp.admin import othersite
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^otheradmin/', othersite.urls),
    ]
    

    然后,您可以通过您使用的任何 url 访问其他管理员。在这种情况下,/otheradmin/

    此语法适用于 Django 1.10+。在早期版本的 Django 中,您使用 include(othersite.urls) 而不是 othersite.urls

    【讨论】:

      猜你喜欢
      • 2020-07-03
      • 1970-01-01
      • 2012-05-03
      • 2010-10-13
      • 2011-04-27
      • 1970-01-01
      • 2013-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多