Django: Permission: app_label.codename をアノテートする
from django.db.models import F, Value
from django.db.models.functions import Concat
from django.contrib.auth import models as auth_models
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 に使うのは現実的ではない