Django: Permission: app_label.codename をアノテートする#
1
2
3
| from django.db.models import F, Value
from django.db.models.functions import Concat
from django.contrib.auth import models as auth_models
|
1
2
3
4
5
6
7
|
class PermissionDef:
@classmethod
def choices(cls):
return auth_models.Permission.objects.annotate(
code=Concat("content_type__app_label", Value("."), "codename")
).values_list("code", "name")
|
ただし、件数が大きいので, フィールドのchoices に使うのは現実的ではない