125890 add form fields

This commit is contained in:
Arthur 2023-06-06 09:57:23 -07:00
parent b17dfa0534
commit a609467968
6 changed files with 48 additions and 32 deletions

View File

@ -22,6 +22,7 @@ class ActionsMixin:
Return a tuple of actions for which the given user is permitted to do. Return a tuple of actions for which the given user is permitted to do.
""" """
model = model or self.queryset.model model = model or self.queryset.model
return [ return [
action for action in self.actions if user.has_perms([ action for action in self.actions if user.has_perms([
get_permission_for_model(model, name) for name in self.action_perms[action] get_permission_for_model(model, name) for name in self.action_perms[action]

View File

@ -20,36 +20,27 @@ class UserFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm):
model = NetBoxUser model = NetBoxUser
fieldsets = ( fieldsets = (
(None, ('q', 'filter_id',)), (None, ('q', 'filter_id',)),
('Location', ('region_id', 'site_group_id', 'site_id')), ('Name', ('username', 'first_name', 'last_name')),
('ASN', ('asn',)), ('Security', ('is_superuser', 'is_staff', 'is_active')),
('Contacts', ('contact', 'contact_role', 'contact_group')),
) )
region_id = DynamicModelMultipleChoiceField( username = forms.CharField(
queryset=Region.objects.all(), required=False
)
first_name = forms.CharField(
required=False
)
last_name = forms.CharField(
required=False
)
is_superuser = forms.BooleanField(
required=False, required=False,
label=_('Region') label='Is Superuser',
) )
site_group_id = DynamicModelMultipleChoiceField( is_staff = forms.BooleanField(
queryset=SiteGroup.objects.all(),
required=False, required=False,
label=_('Site group') label='Is Staff',
) )
site_id = DynamicModelMultipleChoiceField( is_active = forms.BooleanField(
queryset=Site.objects.all(),
required=False, required=False,
query_params={ label='Is Active',
'region_id': '$region_id',
'site_group_id': '$site_group_id',
},
label=_('Site')
) )
asn = forms.IntegerField(
required=False,
label=_('ASN (legacy)')
)
asn_id = DynamicModelMultipleChoiceField(
queryset=ASN.objects.all(),
required=False,
label=_('ASNs')
)
tag = TagFilterField(model)

View File

@ -2,6 +2,7 @@ from django import forms
from django.conf import settings from django.conf import settings
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.contrib.auth.forms import AuthenticationForm, PasswordChangeForm as DjangoPasswordChangeForm from django.contrib.auth.forms import AuthenticationForm, PasswordChangeForm as DjangoPasswordChangeForm
from django.contrib.auth.models import Group
from django.contrib.postgres.forms import SimpleArrayField from django.contrib.postgres.forms import SimpleArrayField
from django.utils.html import mark_safe from django.utils.html import mark_safe
from django.utils.translation import gettext as _ from django.utils.translation import gettext as _
@ -10,6 +11,7 @@ from ipam.formfields import IPNetworkFormField
from ipam.validators import prefix_validator from ipam.validators import prefix_validator
from netbox.preferences import PREFERENCES from netbox.preferences import PREFERENCES
from utilities.forms import BootstrapMixin from utilities.forms import BootstrapMixin
from utilities.forms.fields import DynamicModelChoiceField, DynamicModelMultipleChoiceField
from utilities.forms.widgets import DateTimePicker from utilities.forms.widgets import DateTimePicker
from utilities.utils import flatten_dict from utilities.utils import flatten_dict
from users.models import * from users.models import *
@ -141,13 +143,20 @@ class TokenForm(BootstrapMixin, forms.ModelForm):
class UserForm(BootstrapMixin, forms.ModelForm): class UserForm(BootstrapMixin, forms.ModelForm):
groups = DynamicModelMultipleChoiceField(
queryset=Group.objects.all()
)
fieldsets = ( fieldsets = (
('User', ('username', )), ('User', ('username', 'first_name', 'last_name', 'email', )),
('Groups', ('groups', )),
('Status', ('is_active', 'is_staff', 'is_superuser', )),
('Important Dates', ('last_login', 'date_joined', )),
) )
class Meta: class Meta:
model = NetBoxUser model = NetBoxUser
fields = [ fields = [
'username', 'username', 'first_name', 'last_name', 'email', 'groups',
'is_active', 'is_staff', 'is_superuser', 'last_login', 'date_joined',
] ]

View File

@ -1,4 +1,5 @@
import django_tables2 as tables import django_tables2 as tables
from django_tables2.utils import A
from .models import Token from .models import Token
from netbox.tables import NetBoxTable, columns from netbox.tables import NetBoxTable, columns
from users.models import NetBoxUser from users.models import NetBoxUser
@ -56,7 +57,7 @@ class TokenTable(NetBoxTable):
class UserTable(NetBoxTable): class UserTable(NetBoxTable):
username = tables.Column() username = tables.LinkColumn('users:netboxuser', args=[A('pk')])
actions = columns.ActionsColumn( actions = columns.ActionsColumn(
actions=('edit', 'delete'), actions=('edit', 'delete'),
) )
@ -64,6 +65,6 @@ class UserTable(NetBoxTable):
class Meta(NetBoxTable.Meta): class Meta(NetBoxTable.Meta):
model = NetBoxUser model = NetBoxUser
fields = ( fields = (
'pk', 'id', 'username', 'email', 'first_name', 'last_name' 'pk', 'id', 'username', 'email', 'first_name', 'last_name', 'is_superuser', 'is_staff', 'is_active'
) )
default_columns = ('pk', 'username', 'email', 'first_name', 'last_name') default_columns = ('pk', 'username', 'email', 'first_name', 'last_name', 'is_superuser')

View File

@ -14,6 +14,7 @@ urlpatterns = [
# Users # Users
path('users/', views.NetBoxUserListView.as_view(), name='user_list'), path('users/', views.NetBoxUserListView.as_view(), name='user_list'),
path('users/add/', views.NetBoxUserEditView.as_view(), name='user_add'), path('users/add/', views.NetBoxUserEditView.as_view(), name='user_add'),
path('users/add/', views.NetBoxUserEditView.as_view(), name='netboxuser_add'),
path('users/import/', views.NetBoxUserBulkImportView.as_view(), name='netboxuser_import'), path('users/import/', views.NetBoxUserBulkImportView.as_view(), name='netboxuser_import'),
path('users/edit/', views.NetBoxUserBulkEditView.as_view(), name='netboxuser_bulk_edit'), path('users/edit/', views.NetBoxUserBulkEditView.as_view(), name='netboxuser_bulk_edit'),
path('users/delete/', views.NetBoxUserBulkDeleteView.as_view(), name='netboxuser_bulk_delete'), path('users/delete/', views.NetBoxUserBulkDeleteView.as_view(), name='netboxuser_bulk_delete'),

View File

@ -346,9 +346,22 @@ class NetBoxUserListView(generic.ObjectListView):
table = tables.UserTable table = tables.UserTable
@register_model_view(get_user_model()) @register_model_view(NetBoxUser)
class NetBoxUserView(generic.ObjectView): class NetBoxUserView(generic.ObjectView):
queryset = get_user_model().objects.all() queryset = get_user_model().objects.all()
template_name = 'users/user.html'
def get_extra_context(self, request, instance):
# Compile changelog table
changelog = ObjectChange.objects.restrict(request.user, 'view').filter(user=request.user).prefetch_related(
'changed_object_type'
)[:20]
changelog_table = ObjectChangeTable(changelog)
return {
'changelog_table': changelog_table,
'active_tab': 'user',
}
@register_model_view(NetBoxUser, 'edit') @register_model_view(NetBoxUser, 'edit')