diff --git a/kpi/filters.py b/kpi/filters.py index 436c1beda0..711961550a 100644 --- a/kpi/filters.py +++ b/kpi/filters.py @@ -66,7 +66,7 @@ def filter_queryset(self, request, queryset, view): get_anonymous_user(), permission, queryset) if view.action != 'list': # Not a list, so discoverability doesn't matter - return owned_and_explicitly_shared | public + return (owned_and_explicitly_shared | public).distinct() # For a list, do not include public objects unless they are also # discoverable @@ -85,7 +85,7 @@ def filter_queryset(self, request, queryset, view): if all_public: # We were asked not to consider subscriptions; return all # discoverable objects - return owned_and_explicitly_shared | discoverable + return (owned_and_explicitly_shared | discoverable).distinct() # Of the discoverable objects, determine to which the user has # subscribed @@ -101,7 +101,7 @@ def filter_queryset(self, request, queryset, view): # Neither the model or its parent has a subscription relation subscribed = public.none() - return owned_and_explicitly_shared | subscribed + return (owned_and_explicitly_shared | subscribed).distinct() class RelatedAssetPermissionsFilter(KpiObjectPermissionsFilter): diff --git a/kpi/models/asset.py b/kpi/models/asset.py index 06fcbe5dc2..64a2e8c0ac 100644 --- a/kpi/models/asset.py +++ b/kpi/models/asset.py @@ -756,6 +756,7 @@ def has_active_hooks(self): :return: {boolean} """ return self.hooks.filter(active=True).exists() + @staticmethod def optimize_queryset_for_list(queryset): ''' Used by serializers to improve performance when listing assets '''