2013-09-03 3 views
0

Я использую Django с инструментами django-admin. После того, как я подклассифицировал SiteAdmin и использовал его для регистрации моих классов admin, исчезает все меню приложений. Моя модификация по индексу и app_index только добавляет свойство изображения из admin_model в model_dictМеню admin-tools Django для приложений не отображается после подкласса SiteAdmin

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) 

Я зарегистрировал все мои модели приложения точно так же, как описан выше, Auth и меню сайтов отображается, но ни один из моих приложений и их model_admin-х

ответ

3

кажется, что Django администратора-инструменты поддерживают только пользовательские панели мониторинга при использовании пользовательских классов администратора:

поддержка нескольких администратора сайта в Джанго-администратора-инструментов, в данный момент, ограничивается приборных панелей. Это означает, что вы не можете иметь разные меню или темы для каждого экземпляра сайтов администратора. Однако это изменится в ближайшем будущем.

Смотрите здесь для получения дополнительной информации: Working with multiple admin sites

+0

Это не кратен администратора сайта, я передал все это на мой новый с тем же именем существующего, я только «администратор» и никто другой не существует, что та же проблема? – Serjik

+0

Я думаю, что это та же проблема, административные инструменты ограничены только экземпляром Django Admin по умолчанию и в настоящее время не могут поддерживать пользовательский (имя не имеет значения, модуль из его импортированных вопросов). – HankMoody