У меня возникли небольшие проблемы с выяснением того, как настроить optgroup
теги в моей форме Django с помощью MutlipleChoiceField
опций выбора.
В основном я создал интерфейс, использующий Ajax для разрешенияили удаление разрешений для моего проекта, и я использую форму для предварительного заполнения предоставленных и не предоставленных разрешений в 2 MutlipleChoiceField
полях выбора.
В настоящее время существует около 190 разрешений для проекта, поэтому поле выбора выглядит довольно подавляющимна данный момент я хочу сгруппировать эти параметры, используя тег optgroup
html.Я понимаю, как это работает, если я статически набираю варианты выбора для формы, но в настоящее время с моим текущим кодом я не могу найти способ легко сгруппировать их по app_label
, чтобы добавить правильный optgroup
.Кто-нибудь может мне помочь?
Вот мой код:
from django import forms
from django.contrib.auth.models import Group, Permission
from django.contrib.contenttypes.models import ContentType
from django.db.models import Q
class GroupForm(forms.ModelForm):
class Meta:
model = Group
fields = ['permissions']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if 'instance' in kwargs:
instance = kwargs['instance']
granted_permissions = list()
not_granted_permissions = list()
all_permissions = Permission.objects.all().order_by('id', 'content_type__app_label')
for permission in all_permissions:
if permission in instance.permissions.all().order_by('id', 'content_type__app_label'):
# I NEED OPTGROUP HERE FOR EACH ITEMS content_type__app_label
granted_permissions.append([permission.id, permission.name])
else:
# I NEED OPTGROUP HERE FOR EACH ITEMS content_type__app_label
not_granted_permissions.append([permission.id, permission.name])
self.fields['permissions'] = forms.MultipleChoiceField(
label='Granted Permissions',
required=False,
choices=granted_permissions)
self.fields['not_granted_permissions'] = forms.MultipleChoiceField(
label='Not Granted Permissions',
required=False,
choices=not_granted_permissions)