12589 fix users object_permissions m2m

This commit is contained in:
Arthur 2023-06-12 15:17:48 -07:00
parent 3ed852f88a
commit cc7f7687c4
2 changed files with 28 additions and 6 deletions

View File

@ -7,7 +7,7 @@ from dcim.models import Region, Site, SiteGroup
from ipam.models import ASN from ipam.models import ASN
from netbox.forms import NetBoxModelFilterSetForm from netbox.forms import NetBoxModelFilterSetForm
from tenancy.forms import TenancyFilterForm, ContactModelFilterForm from tenancy.forms import TenancyFilterForm, ContactModelFilterForm
from users.models import NetBoxUser from users.models import ObjectPermission, NetBoxGroup, NetBoxUser
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, add_blank_choice from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, add_blank_choice
from utilities.forms.fields import DynamicModelMultipleChoiceField, TagFilterField from utilities.forms.fields import DynamicModelMultipleChoiceField, TagFilterField
from utilities.forms.widgets import DatePicker, NumberWithOptions from utilities.forms.widgets import DatePicker, NumberWithOptions
@ -49,14 +49,14 @@ class UserFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm):
class GroupFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm): class GroupFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm):
model = NetBoxUser model = NetBoxGroup
fieldsets = ( fieldsets = (
(None, ('q', 'filter_id',)), (None, ('q', 'filter_id',)),
) )
class ObjectPermissionFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm): class ObjectPermissionFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm):
model = NetBoxUser model = ObjectPermission
fieldsets = ( fieldsets = (
(None, ('q', 'filter_id',)), (None, ('q', 'filter_id',)),
(None, ('enabled',)), (None, ('enabled',)),

View File

@ -154,7 +154,8 @@ class UserForm(BootstrapMixin, forms.ModelForm):
object_permissions = DynamicModelMultipleChoiceField( object_permissions = DynamicModelMultipleChoiceField(
required=False, required=False,
label=_('Permissions'), label=_('Permissions'),
queryset=ObjectPermission.objects.all() queryset=ObjectPermission.objects.all(),
to_field_name='pk',
) )
fieldsets = ( fieldsets = (
@ -172,6 +173,15 @@ class UserForm(BootstrapMixin, forms.ModelForm):
'is_active', 'is_staff', 'is_superuser', 'last_login', 'date_joined', 'is_active', 'is_staff', 'is_superuser', 'last_login', 'date_joined',
] ]
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['object_permissions'].initial = self.instance.object_permissions.all().values_list('id', flat=True)
def save(self, *args, **kwargs):
instance = super().save(*args, **kwargs)
instance.object_permissions.set(self.cleaned_data['object_permissions'])
return instance
class GroupForm(BootstrapMixin, forms.ModelForm): class GroupForm(BootstrapMixin, forms.ModelForm):
users = DynamicModelMultipleChoiceField( users = DynamicModelMultipleChoiceField(
@ -181,7 +191,8 @@ class GroupForm(BootstrapMixin, forms.ModelForm):
object_permissions = DynamicModelMultipleChoiceField( object_permissions = DynamicModelMultipleChoiceField(
required=False, required=False,
label=_('Permissions'), label=_('Permissions'),
queryset=ObjectPermission.objects.all() queryset=ObjectPermission.objects.all(),
to_field_name='pk',
) )
fieldsets = ( fieldsets = (
@ -196,6 +207,17 @@ class GroupForm(BootstrapMixin, forms.ModelForm):
'name', 'users', 'object_permissions', 'name', 'users', 'object_permissions',
] ]
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['users'].initial = self.instance.user_set.all().values_list('id', flat=True)
self.fields['object_permissions'].initial = self.instance.object_permissions.all().values_list('id', flat=True)
def save(self, *args, **kwargs):
instance = super().save(*args, **kwargs)
instance.user_set.set(self.cleaned_data['users'])
instance.object_permissions.set(self.cleaned_data['object_permissions'])
return instance
class ObjectPermissionForm(BootstrapMixin, forms.ModelForm): class ObjectPermissionForm(BootstrapMixin, forms.ModelForm):
actions = SimpleArrayField( actions = SimpleArrayField(
@ -212,7 +234,7 @@ class ObjectPermissionForm(BootstrapMixin, forms.ModelForm):
) )
object_types = ContentTypeMultipleChoiceField( object_types = ContentTypeMultipleChoiceField(
queryset=ContentType.objects.all(), queryset=ContentType.objects.all(),
limit_choices_to=OBJECTPERMISSION_OBJECT_TYPES limit_choices_to=OBJECTPERMISSION_OBJECT_TYPES,
) )
can_view = forms.BooleanField(required=False) can_view = forms.BooleanField(required=False)