2015-07-15 2 views
1

Как полностью удалить этот фильтр и его функциональность из страницы администратора?Как удалить функциональность фильтра изменений, появляющуюся в django admin?

enter image description here

Я пытаюсь отобразить только пользователи, чьи сотрудники статус верно, и я думаю, что запрос не работает из-за фильтра «По статусу персонала» установлен на «Все» на странице загрузки , В любом случае, как удалить его полностью?

ответ

2

list_filter =() Добавить к определению модели.

0

Да, я нашел другой путь более ясным для этого. Если вы видите исходный код класса аутентификации (User Class) админ выглядит следующим образом:

class UserAdmin(admin.ModelAdmin): 
    add_form_template = 'admin/auth/user/add_form.html' 
    change_user_password_template = None 
    fieldsets = (
     (None, {'fields': ('username', 'password')}), 
     (_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}), 
     (_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser', 
             'groups', 'user_permissions')}), 
     (_('Important dates'), {'fields': ('last_login', 'date_joined')}), 
    ) 
    add_fieldsets = (
     (None, { 
      'classes': ('wide',), 
      'fields': ('username', 'password1', 'password2'), 
     }), 
    ) 
    form = UserChangeForm 
    add_form = UserCreationForm 
    change_password_form = AdminPasswordChangeForm 
    list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff') 
    list_filter = ('is_staff', 'is_superuser', 'is_active', 'groups') 
    search_fields = ('username', 'first_name', 'last_name', 'email') 
    ordering = ('username',) 
    filter_horizontal = ('groups', 'user_permissions',) 

    def get_fieldsets(self, request, obj=None): 
     if not obj: 
      return self.add_fieldsets 
     return super(UserAdmin, self).get_fieldsets(request, obj) 

    def get_form(self, request, obj=None, **kwargs): 
     """ 
     Use special form during user creation 
     """ 
     defaults = {} 
     if obj is None: 
      defaults['form'] = self.add_form 
     defaults.update(kwargs) 
     return super(UserAdmin, self).get_form(request, obj, **defaults) 

    def get_urls(self): 
     return [ 
      url(r'^(.+)/password/$', self.admin_site.admin_view(self.user_change_password), name='auth_user_password_change'), 
     ] + super(UserAdmin, self).get_urls() 

    def lookup_allowed(self, lookup, value): 
     # See #20078: we don't want to allow any lookups involving passwords. 
     if lookup.startswith('password'): 
      return False 
     return super(UserAdmin, self).lookup_allowed(lookup, value) 

    @sensitive_post_parameters_m 
    @csrf_protect_m 
    @transaction.atomic 
    def add_view(self, request, form_url='', extra_context=None): 
     # It's an error for a user to have add permission but NOT change 
     # permission for users. If we allowed such users to add users, they 
     # could create superusers, which would mean they would essentially have 
     # the permission to change users. To avoid the problem entirely, we 
     # disallow users from adding users if they don't have change 
     # permission. 
     if not self.has_change_permission(request): 
      if self.has_add_permission(request) and settings.DEBUG: 
       # Raise Http404 in debug mode so that the user gets a helpful 
       # error message. 
       raise Http404(
        'Your user does not have the "Change user" permission. In ' 
        'order to add users, Django requires that your user ' 
        'account have both the "Add user" and "Change user" ' 
        'permissions set.') 
      raise PermissionDenied 
     if extra_context is None: 
      extra_context = {} 
     username_field = self.model._meta.get_field(self.model.USERNAME_FIELD) 
     defaults = { 
      'auto_populated_fields':(), 
      'username_help_text': username_field.help_text, 
     } 
     extra_context.update(defaults) 
     return super(UserAdmin, self).add_view(request, form_url, 
               extra_context) 

    @sensitive_post_parameters_m 
    def user_change_password(self, request, id, form_url=''): 
     if not self.has_change_permission(request): 
      raise PermissionDenied 
     user = self.get_object(request, unquote(id)) 
     if user is None: 
      raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % { 
       'name': force_text(self.model._meta.verbose_name), 
       'key': escape(id), 
      }) 
     if request.method == 'POST': 
      form = self.change_password_form(user, request.POST) 
      if form.is_valid(): 
       form.save() 
       change_message = self.construct_change_message(request, form, None) 
       self.log_change(request, user, change_message) 
       msg = ugettext('Password changed successfully.') 
       messages.success(request, msg) 
       update_session_auth_hash(request, form.user) 
       return HttpResponseRedirect(
        reverse(
         '%s:auth_%s_change' % (
          self.admin_site.name, 
          user._meta.model_name, 
         ), 
         args=(user.pk,), 
        ) 
       ) 
     else: 
      form = self.change_password_form(user) 

     fieldsets = [(None, {'fields': list(form.base_fields)})] 
     adminForm = admin.helpers.AdminForm(form, fieldsets, {}) 

     context = { 
      'title': _('Change password: %s') % escape(user.get_username()), 
      'adminForm': adminForm, 
      'form_url': form_url, 
      'form': form, 
      'is_popup': (IS_POPUP_VAR in request.POST or 
         IS_POPUP_VAR in request.GET), 
      'add': True, 
      'change': False, 
      'has_delete_permission': False, 
      'has_change_permission': True, 
      'has_absolute_url': False, 
      'opts': self.model._meta, 
      'original': user, 
      'save_as': False, 
      'show_save': True, 
     } 
     context.update(admin.site.each_context(request)) 

     request.current_app = self.admin_site.name 

     return TemplateResponse(request, 
      self.change_user_password_template or 
      'admin/auth/user/change_password.html', 
      context) 

    def response_add(self, request, obj, post_url_continue=None): 
     """ 
     Determines the HttpResponse for the add_view stage. It mostly defers to 
     its superclass implementation but is customized because the User model 
     has a slightly different workflow. 
     """ 
     # We should allow further modification of the user just added i.e. the 
     # 'Save' button should behave like the 'Save and continue editing' 
     # button except in two scenarios: 
     # * The user has pressed the 'Save and add another' button 
     # * We are adding a user in a popup 
     if '_addanother' not in request.POST and IS_POPUP_VAR not in request.POST: 
      request.POST['_continue'] = 1 
     return super(UserAdmin, self).response_add(request, obj, 
                post_url_continue) 

В админом любое приложение вы можете отменить класс пользователей, определить свой собственный UserAdmin, а затем, зарегистрируйтесь это снова:

from django.contrib.auth.models import User 
from django.contrib.auth.admin import UserAdmin 
... 
admin.site.unregister(User) 

class UserAdmin(UserAdmin): 
    model = User 
    list_filter =() 

admin.site.register(User, UserAdmin) 

Ввод list_filter=() переопределение фильтра по умолчанию говоря Джанго, что вы не хотите какой-либо фильтра, поэтому он не будет появляться. И вы можете переопределить любую конфигурацию по умолчанию в этом классе администратора.

EDIT: Вы должны добавить функцию queryset для фильтрации объектов, которые хотите показать. Для ваших целей, вы должны сделать следующее:

admin.site.unregister(User) 

class UserAdmin(UserAdmin): 
    model = User 
    list_filter =() 

    def queryset(self, request): 
     qs = super(UserAdmin, self).queryset(request) 
     return qs.filter(is_staff=True) 

admin.site.register(User, UserAdmin) 
+0

+1 как это правильно, я уже пробовал, он удаляет фильтр со страницы. Но он не удаляет значение по умолчанию «Все» при загрузке страницы. ** (т. е. функциональность все еще существует, но скрыта. ** Поэтому, хотя я написал запрос для отображения только _is_staff = True_ для моделей, он игнорирует запрос и отображает все. –

+0

Я отредактировал ответ, проверьте его @learning – bcap

+0

Да, у меня уже был запрос с объектом Q, но он игнорирует это и отображает все, тем не менее .. –

Смежные вопросы