diff --git a/netbox/users/forms/filtersets.py b/netbox/users/forms/filtersets.py index 136fd8c70..95746a6c8 100644 --- a/netbox/users/forms/filtersets.py +++ b/netbox/users/forms/filtersets.py @@ -7,7 +7,7 @@ from dcim.models import Region, Site, SiteGroup from ipam.models import ASN from netbox.forms import NetBoxModelFilterSetForm 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.fields import DynamicModelMultipleChoiceField, TagFilterField from utilities.forms.widgets import DatePicker, NumberWithOptions @@ -49,14 +49,14 @@ class UserFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm): class GroupFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm): - model = NetBoxUser + model = NetBoxGroup fieldsets = ( (None, ('q', 'filter_id',)), ) class ObjectPermissionFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm): - model = NetBoxUser + model = ObjectPermission fieldsets = ( (None, ('q', 'filter_id',)), (None, ('enabled',)), diff --git a/netbox/users/forms/model_forms.py b/netbox/users/forms/model_forms.py index f35c56cb4..fe0ac9431 100644 --- a/netbox/users/forms/model_forms.py +++ b/netbox/users/forms/model_forms.py @@ -154,7 +154,8 @@ class UserForm(BootstrapMixin, forms.ModelForm): object_permissions = DynamicModelMultipleChoiceField( required=False, label=_('Permissions'), - queryset=ObjectPermission.objects.all() + queryset=ObjectPermission.objects.all(), + to_field_name='pk', ) fieldsets = ( @@ -172,6 +173,15 @@ class UserForm(BootstrapMixin, forms.ModelForm): '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): users = DynamicModelMultipleChoiceField( @@ -181,7 +191,8 @@ class GroupForm(BootstrapMixin, forms.ModelForm): object_permissions = DynamicModelMultipleChoiceField( required=False, label=_('Permissions'), - queryset=ObjectPermission.objects.all() + queryset=ObjectPermission.objects.all(), + to_field_name='pk', ) fieldsets = ( @@ -196,6 +207,17 @@ class GroupForm(BootstrapMixin, forms.ModelForm): '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): actions = SimpleArrayField( @@ -212,7 +234,7 @@ class ObjectPermissionForm(BootstrapMixin, forms.ModelForm): ) object_types = ContentTypeMultipleChoiceField( queryset=ContentType.objects.all(), - limit_choices_to=OBJECTPERMISSION_OBJECT_TYPES + limit_choices_to=OBJECTPERMISSION_OBJECT_TYPES, ) can_view = forms.BooleanField(required=False)