Privacy Policy
Snippets index

  Dynamically alter the Changelist in Django admin

from django.contrib.admin.views.main import ChangeList

class RegistrationChangeList(ChangeList):

    def __init__(self, request, model, list_display, list_display_links,
            list_filter, date_hierarchy, search_fields, list_select_related,
            list_per_page, list_max_show_all, list_editable, model_admin):

        list_per_page = config.LISTING_PAGE_SIZE

        INVOICES_FIELDS = ('paid', 'invoice_link', 'invoice_send_link',)
        user = request.user
        if user.is_superuser or user.has_perm('courses.can_view_invoices'):
            mylist_display = copy(list_display)
        else:
            mylist_display = [item for item in list_display if item not in INVOICES_FIELDS]

        super(RegistrationChangeList, self).__init__(request, model, mylist_display, list_display_links,
            list_filter, date_hierarchy, search_fields, list_select_related,
            list_per_page, list_max_show_all, list_editable, model_admin)

class RegistrationAdmin(admin.ModelAdmin):
    ...
    def get_changelist(self, request, **kwargs):
        """
        Returns the ChangeList class for use on the changelist page.
        """
        return RegistrationChangeList