diff --git a/edc_data_manager/admin/data_query_admin.py b/edc_data_manager/admin/data_query_admin.py index ebbb13d..424f40a 100644 --- a/edc_data_manager/admin/data_query_admin.py +++ b/edc_data_manager/admin/data_query_admin.py @@ -29,14 +29,14 @@ from ..auth_objects import DATA_MANAGER from ..constants import CLOSED_WITH_ACTION from ..forms import DataQueryForm -from ..modeladmin_mixins import DataManagerModelAdminMixin +from ..modeladmin_mixins import DataManagerSiteModelAdminMixin from ..models import DataDictionary, DataQuery from .actions import toggle_dm_status @register(DataQuery, site=edc_data_manager_admin) class DataQueryAdmin( - DataManagerModelAdminMixin, ModelAdminSubjectDashboardMixin, SimpleHistoryAdmin + DataManagerSiteModelAdminMixin, ModelAdminSubjectDashboardMixin, SimpleHistoryAdmin ): status_column_template_name = ( f"edc_data_manager/bootstrap{get_bootstrap_version()}/columns/status.html" diff --git a/edc_data_manager/modeladmin_mixins.py b/edc_data_manager/modeladmin_mixins.py index 737f13f..f834bf1 100644 --- a/edc_data_manager/modeladmin_mixins.py +++ b/edc_data_manager/modeladmin_mixins.py @@ -5,14 +5,19 @@ from django.utils.html import format_html from django.utils.safestring import mark_safe -from edc_data_manager.auth_objects import DATA_MANAGER_ROLE +from .auth_objects import DATA_MANAGER_ROLE -class DataManagerModelAdminMixin: +class DataManagerSiteModelAdminMixin: + """Do not declare together with `SiteModelAdminMixin`""" + + on_site_manager = "on_site" + def get_queryset(self: ModelAdmin, request): """ - Return a QuerySet of all model instances that can be edited by the - admin site. This is used by changelist_view. + Return a QuerySet of all model instances for multiple sites + that can be viewed/edited by the admin site. This is used + by changelist_view. """ expanded_view_roles = getattr( settings, "EDC_DATA_MANAGER_EXPANDED_VIEW_ROLES", [DATA_MANAGER_ROLE] @@ -27,7 +32,7 @@ def get_queryset(self: ModelAdmin, request): roles = [r.name for r in request.user.userprofile.roles.all()] if list(set(expanded_view_roles) & set(roles)): site_ids = [s.id for s in request.user.userprofile.sites.all()] - qs = self.model.objects.get_queryset().filter(site_id__in=site_ids) + qs = self.model._default_manager.get_queryset().filter(site_id__in=site_ids) storage = get_messages(request) if not [message for message in storage if message.message == my_message]: self.message_user( @@ -37,7 +42,8 @@ def get_queryset(self: ModelAdmin, request): fail_silently=True, ) else: - qs = self.model._default_manager.get_queryset() + manager = self.on_site_manager or "_default_manager" + qs = getattr(self.model, manager).get_queryset() ordering = self.get_ordering(request) if ordering: qs = qs.order_by(*ordering)