diff --git a/netbox/users/forms/bulk_import.py b/netbox/users/forms/bulk_import.py index ed08f03fa..723b121de 100644 --- a/netbox/users/forms/bulk_import.py +++ b/netbox/users/forms/bulk_import.py @@ -1,17 +1,39 @@ from django import forms -from users.models import NetBoxGroup -from netbox.forms import NetBoxModelImportForm +from users.models import NetBoxGroup, NetBoxUser +from utilities.forms import CSVModelForm __all__ = ( 'GroupImportForm', + 'UserImportForm', ) -class GroupImportForm(NetBoxModelImportForm): +class GroupImportForm(CSVModelForm): class Meta: model = NetBoxGroup fields = ( 'name', ) + + +class UserImportForm(CSVModelForm): + + class Meta: + model = NetBoxUser + fields = ( + 'username', 'first_name', 'last_name', 'email', 'password', 'is_staff', + 'is_active', 'is_superuser' + ) + + def save(self, *args, **kwargs): + edited = getattr(self, 'instance', None) + instance = super().save(*args, **kwargs) + + # On edit, check if we have to save the password + if edited and self.cleaned_data.get("password"): + instance.set_password(self.cleaned_data.get("password")) + instance.save() + + return instance diff --git a/netbox/users/urls.py b/netbox/users/urls.py index 815a39ec8..50965a16f 100644 --- a/netbox/users/urls.py +++ b/netbox/users/urls.py @@ -16,6 +16,7 @@ urlpatterns = [ path('users/', views.NetBoxUserListView.as_view(), name='netboxuser_list'), path('users/add/', views.NetBoxUserEditView.as_view(), name='netboxuser_add'), path('users/edit/', views.NetBoxUserBulkEditView.as_view(), name='netboxuser_bulk_edit'), + path('users/import/', views.NetBoxUserBulkImportView.as_view(), name='netboxuser_import'), path('users/delete/', views.NetBoxUserBulkDeleteView.as_view(), name='netboxuser_bulk_delete'), path('users//', include(get_model_urls('users', 'netboxuser'))), diff --git a/netbox/users/views.py b/netbox/users/views.py index 79a3d23e0..1a29b1dcd 100644 --- a/netbox/users/views.py +++ b/netbox/users/views.py @@ -405,6 +405,11 @@ class NetBoxUserBulkEditView(generic.BulkEditView): form = forms.UserBulkEditForm +class NetBoxUserBulkImportView(generic.BulkImportView): + queryset = NetBoxUser.objects.all() + model_form = forms.UserImportForm + + class NetBoxUserBulkDeleteView(generic.BulkDeleteView): queryset = NetBoxUser.objects.all() filterset = filtersets.UserFilterSet