Django: User: Permissionコードのどれかを保有しているユーザーを検索
Django: User: Permission コードのどれかを持っているユーザーを検索 1 2 3 from operator import or_ from functools import reduce from django.db.models import Q 1 2 3 4 5 6 7 8 9 10 11 12 13 class UserQuerySet(models.QuerySet): def filter_has_perm(self, perm_codeset: List[str]): """ Permission code(List[app_label.codename]) の一覧のどれかを含むユーザーの検索 """ def _query(item): return reduce(or_, [ Q(user_permissions__content_type__app_label=item[0], user_permissions__codename=item[1]), Q(groups__permissions__content_type__app_label=item[0], groups__permissions__codename=item[1]), ]) query = reduce(or_, map(_query, map(lambda i: i.strip().split("."), perm_codeset))) return self.filter(query) 1 2 3 4 5 6 7 8 9 10 11 12 13 class UserFilter(django_filters.FilterSet) def filter_permission_codes__in_csv(self, queryset, name, value): if not value: return queryset values = value.split(",") if isinstance(value, str) else value if len(values) < 1: return queryset return queryset.filter_has_perm(values) permission_codes__in_csv = DF.BaseInFilter( label="パーミッションコード(CSV)", method="filter_permission_codes__in_csv", )