2016-09-19 3 views
0

내 유스 케이스를 사용하려면 장고 프로젝트의 관리 사이트에서 여러 데이터베이스를 노출해야합니다. 다음장고 관리자에서 여러 데이터베이스 노출

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) 

예제의 문서 상태 : 여기 https://docs.djangoproject.com/en/dev/topics/db/multi-db/#exposing-multiple-databases-in-django-s-admin-interface

사용 된 코드입니다 :이 예는 두 개의 관리 사이트 설정이 링크를 따라하는 것을 않았다. 첫 번째 사이트에서 작성자 및 게시자 개체가 노출됩니다. 게시자 개체에는 해당 게시자가 게시 한 책을 보여주는 표 형식의 인라인이 있습니다. 두 번째 사이트는 인라인없이 게시자를 노출합니다.

다른 곳에서는 찾아 볼 수없는 것 같습니다. 어떻게 다른 '사이트'에 액세스합니까? 다른 '사이트'에 노출 된 표를 보려면 어떤 URL을 사용해야합니까? 뭔가 간단해야하지만, 어디서나 찾을 수 없습니다.

답변

0

당신은 당신이 정기적으로 사이트를 사용하는 방식과 유사하여 관리 사이트의 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/입니다.

이 구문은 장고 1.10 이상을위한 구문입니다. 이전 버전의 장고에서는 othersite.urls 대신에 include(othersite.urls)을 사용했습니다.

+0

감사합니다. Alasdair! 이 작동합니다. – Chetan

관련 문제