docs: def get_groups_with_perms(obj, attach_perms=False):
      """Return queryset of all ``Group`` objects with *any* object permissions for the given ``obj``."""
      ctype = get_content_type(obj)
      group_model = get_group_obj_perms_model(obj)
  
      if not attach_perms:
          # It's much easier without attached perms so we do it first if that is the case
          group_rel_name = group_model.group.field.related_query_name()
          if group_model.objects.is_generic():
              group_filters = {
                  '%s__content_type' % group_rel_name: ctype,
                  '%s__object_pk' % group_rel_name: obj.pk,
              }
          else:
              group_filters = {'%s__content_object' % group_rel_name: obj}
          return Group.objects.filter(**group_filters).distinct()
      else:
          group_perms_mapping = defaultdict(list)
          groups_with_perms = get_groups_with_perms(obj)
          queryset = group_model.objects.filter(group__in=groups_with_perms).prefetch_related('group', 'permission')
          if group_model is GroupObjectPermission:
              queryset = queryset.filter(object_pk=obj.pk, content_type=ctype)
          else:
              queryset = queryset.filter(content_object_id=obj.pk)
  
          for group_perm in queryset:
              group_perms_mapping[group_perm.group].append(group_perm.permission.codename)
          return dict(group_perms_mapping)