2013-09-03 2 views
0

django-admin-tools에서 장고를 사용하고 있습니다. SiteAdmin을 하위 클래스로 만들고이를 사용하여 내 관리 클래스를 등록하면 전체 응용 프로그램 메뉴가 사라집니다. 지수와 app_index에 내 수정은 그냥 위와 같이 내 모든 응용 프로그램 모델 같은 방법으로 등록SiteAdmin을 서브 클래스 화하면 응용 프로그램의 Django 관리 도구 메뉴가 표시되지 않습니다.

class CustomAdminSite(AdminSite): 
    @never_cache 
    def index(self, request, extra_context=None): 
     """ 
     Displays the main admin index page, which lists all of the installed 
     apps that have been registered in this site. 
     """ 
     app_dict = {} 
     user = request.user 
     for model, model_admin in self._registry.items(): 
      app_label = model._meta.app_label 
      has_module_perms = user.has_module_perms(app_label) 

      if has_module_perms: 
       perms = model_admin.get_model_perms(request) 

       # Check whether user has any perm for this module. 
       # If so, add the module to the model_list. 
       if True in perms.values(): 
        info = (app_label, model._meta.module_name) 
        model_dict = { 
         'name': capfirst(model._meta.verbose_name_plural), 
         'perms': perms, 
        } 
        if hasattr(model_admin, 'picture'):model_dict['picture'] = model_admin.picture 
        if perms.get('change', False): 
         try: 
          model_dict['admin_url'] = reverse('admin:%s_%s_changelist' % info, current_app=self.name) 
         except NoReverseMatch: 
          pass 
        if perms.get('add', False): 
         try: 
          model_dict['add_url'] = reverse('admin:%s_%s_add' % info, current_app=self.name) 
         except NoReverseMatch: 
          pass 
        if app_label in app_dict: 
         app_dict[app_label]['models'].append(model_dict) 
        else: 
         app_dict[app_label] = { 
          'name': app_label.title(), 
          'app_url': reverse('admin:app_list', kwargs={'app_label': app_label}, current_app=self.name), 
          'has_module_perms': has_module_perms, 
          'models': [model_dict], 
         } 

     # Sort the apps alphabetically. 
     app_list = list(six.itervalues(app_dict)) 
     app_list.sort(key=lambda x: x['name']) 

     # Sort the models alphabetically within each app. 
     for app in app_list: 
      app['models'].sort(key=lambda x: x['name']) 

     context = { 
      'title': _('Site administration'), 
      'app_list': app_list, 
     } 
     context.update(extra_context or {}) 
     return TemplateResponse(request, self.index_template or 
           'admin/index.html', context, 
           current_app=self.name) 


    def app_index(self, request, app_label, extra_context=None): 
     user = request.user 
     has_module_perms = user.has_module_perms(app_label) 
     app_dict = {} 
     for model, model_admin in self._registry.items(): 
      if app_label == model._meta.app_label: 
       if has_module_perms: 
        perms = model_admin.get_model_perms(request) 

        # Check whether user has any perm for this module. 
        # If so, add the module to the model_list. 
        if True in perms.values(): 
         info = (app_label, model._meta.module_name) 
         model_dict = { 
          'name': capfirst(model._meta.verbose_name_plural), 
          'perms': perms, 
         } 
         if hasattr(model_admin, 'picture'):model_dict['picture'] = model_admin.picture 
         if perms.get('change', False): 
          try: 
           model_dict['admin_url'] = reverse('admin:%s_%s_changelist' % info, current_app=self.name) 
          except NoReverseMatch: 
           pass 
         if perms.get('add', False): 
          try: 
           model_dict['add_url'] = reverse('admin:%s_%s_add' % info, current_app=self.name) 
          except NoReverseMatch: 
           pass 
         if app_dict: 
          app_dict['models'].append(model_dict), 
         else: 
          # First time around, now that we know there's 
          # something to display, add in the necessary meta 
          # information. 
          app_dict = { 
           'name': app_label.title(), 
           'app_url': '', 
           'has_module_perms': has_module_perms, 
           'models': [model_dict], 
          } 
     if not app_dict: 
      raise Http404('The requested admin page does not exist.') 
     # Sort the models alphabetically within each app. 
     app_dict['models'].sort(key=lambda x: x['name']) 
     context = { 
      'title': _('%s administration') % capfirst(app_label), 
      'app_list': [app_dict], 
     } 
     context.update(extra_context or {}) 

     return TemplateResponse(request, self.app_index_template or [ 
      'admin/%s/app_index.html' % app_label, 
      'admin/app_index.html' 
     ], context, current_app=self.name) 


custom_site = CustomAdminSite(name='admin') 
custom_site.register(Group, GroupAdmin) 
custom_site.register(User, UserAdmin) 
custom_site.register(Site, SiteAdmin) 

, 인증 및 사이트 메뉴가 표시됩니다 model_dict하는 admin_model에서 그림 속성을 추가 있지만 내 응용 프로그램과의 없음 자신의 model_admin의

답변

3

사용자 정의 관리 클래스를 사용할 때 장고 관리자-도구는 사용자 정의 대시 보드를 지원하는 것 같습니다 : 장고 - 관리자 - 도구에서

여러 관리자 사이트를 지원하고, 순간, 대시 보드로 제한. 즉, 각 관리 사이트 인스턴스마다 다른 메뉴 나 테마를 사용할 수 없습니다. 이것은 가까운 장래에 변화 할 것이다.

더 많은 정보를 원하시면 여기를 참조하십시오 : Working with multiple admin sites 여러 관리자 사이트 아니다

+0

, 나는 기존의 동일한 이름으로 내 새에 전체를 전송, 나는 단지 '관리'와 다른이 존재하지 않는 것입니다있다 그게 같은 문제 야? – Serjik

+0

나는 이것이 동일한 문제라고 생각한다. admin 툴은 기본 Django Admin 인스턴스에만 제한되어 있으며 현재는 커스텀 클래스를 지원할 수 없다. (이름은 중요하지 않다. – HankMoody