Compare commits

...

1 Commits

2 changed files with 10 additions and 4 deletions

View File

@@ -884,10 +884,16 @@ class ObjectOwnedOrGrantedPermissionsFilter(ObjectPermissionsFilter):
""" """
def filter_queryset(self, request, queryset, view): def filter_queryset(self, request, queryset, view):
# django-guardian's get_objects_for_user builds its own queryset
# internally and loses prefetch_related declarations. Use its result
# as a subquery so we can filter the original queryset (which retains
# all prefetch hints) rather than returning guardian's queryset directly.
objects_with_perms = super().filter_queryset(request, queryset, view) objects_with_perms = super().filter_queryset(request, queryset, view)
objects_owned = queryset.filter(owner=request.user) return queryset.filter(
objects_unowned = queryset.filter(owner__isnull=True) Q(pk__in=objects_with_perms)
return objects_with_perms | objects_owned | objects_unowned | Q(owner=request.user)
| Q(owner__isnull=True),
)
class ObjectOwnedPermissionsFilter(ObjectPermissionsFilter): class ObjectOwnedPermissionsFilter(ObjectPermissionsFilter):

View File

@@ -919,7 +919,7 @@ class DocumentViewSet(
), ),
), ),
"tags", "tags",
"custom_fields", "custom_fields__field",
"notes", "notes",
) )
) )