95 lines
2.6 KiB
Python
95 lines
2.6 KiB
Python
"""
|
|
Customize the django admin experience
|
|
"""
|
|
from django.contrib import admin
|
|
from django.contrib.admin import SimpleListFilter
|
|
from django.contrib.admin.utils import quote
|
|
from simple_history.admin import SimpleHistoryAdmin
|
|
|
|
from openedx.core.djangoapps.config_model_utils.admin import StackedConfigModelAdmin
|
|
|
|
from .models import DiscussionsConfiguration
|
|
from .models import ProviderFilter
|
|
|
|
|
|
class DiscussionsConfigurationAdmin(SimpleHistoryAdmin):
|
|
"""
|
|
Customize the admin interface for the discussions configuration
|
|
"""
|
|
|
|
search_fields = (
|
|
'context_key',
|
|
'enabled',
|
|
'provider_type',
|
|
)
|
|
list_filter = (
|
|
'enabled',
|
|
'provider_type',
|
|
)
|
|
|
|
def change_view(self, request, object_id=None, form_url="", extra_context=None):
|
|
return super().change_view(request, quote(object_id), form_url, extra_context)
|
|
|
|
|
|
class AllowListFilter(SimpleListFilter):
|
|
"""
|
|
Customize the admin interface for the AllowList
|
|
"""
|
|
|
|
title = 'Allow List'
|
|
parameter_name = 'allow'
|
|
|
|
def lookups(self, request, model_admin):
|
|
queryset = model_admin.get_queryset(request)
|
|
values = tuple(
|
|
(
|
|
','.join(filters[self.parameter_name] or ['None']),
|
|
', '.join(filters[self.parameter_name] or ['None']),
|
|
)
|
|
for filters in queryset.values(self.parameter_name).distinct()
|
|
)
|
|
return values
|
|
|
|
def queryset(self, request, queryset):
|
|
value = self.value()
|
|
if value:
|
|
filter_kwargs = {}
|
|
if ',' in value:
|
|
for v in value.split(','):
|
|
filter_kwargs[self.parameter_name + '__contains'] = v
|
|
queryset = queryset.filter(**filter_kwargs)
|
|
else:
|
|
if value == 'None':
|
|
filter_kwargs[self.parameter_name + '__exact'] = ''
|
|
else:
|
|
filter_kwargs[self.parameter_name + '__contains'] = value
|
|
queryset = queryset.filter(**filter_kwargs)
|
|
return queryset
|
|
|
|
|
|
class DenyListFilter(AllowListFilter):
|
|
"""
|
|
Customize the admin interface for the DenyList
|
|
"""
|
|
title = 'Deny List'
|
|
parameter_name = 'deny'
|
|
|
|
|
|
class ProviderFilterAdmin(StackedConfigModelAdmin):
|
|
"""
|
|
Customize the admin interface for the ProviderFilter
|
|
"""
|
|
|
|
search_fields = (
|
|
'allow',
|
|
'deny',
|
|
)
|
|
list_filter = (
|
|
'enabled',
|
|
AllowListFilter,
|
|
DenyListFilter,
|
|
)
|
|
|
|
admin.site.register(DiscussionsConfiguration, DiscussionsConfigurationAdmin)
|
|
admin.site.register(ProviderFilter, ProviderFilterAdmin)
|