1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

#12795: Complete support for description field on custom Group model

This commit is contained in:
Jeremy Stretch
2024-04-02 14:44:26 -04:00
parent 7fe2e4849d
commit fb129579c1
10 changed files with 46 additions and 12 deletions

View File

@ -17,6 +17,10 @@
<th scope="row">{% trans "Name" %}</th> <th scope="row">{% trans "Name" %}</th>
<td>{{ object.name }}</td> <td>{{ object.name }}</td>
</tr> </tr>
<tr>
<th scope="row">{% trans "Description" %}</th>
<td>{{ object.description|placeholder }}</td>
</tr>
</table> </table>
</div> </div>
</div> </div>

View File

@ -29,7 +29,7 @@ class GroupSerializer(ValidatedModelSerializer):
class Meta: class Meta:
model = Group model = Group
fields = ('id', 'url', 'display', 'name', 'permissions', 'user_count') fields = ('id', 'url', 'display', 'name', 'permissions', 'user_count')
brief_fields = ('id', 'url', 'display', 'name') brief_fields = ('id', 'url', 'display', 'name', 'description')
class UserSerializer(ValidatedModelSerializer): class UserSerializer(ValidatedModelSerializer):

View File

@ -40,7 +40,10 @@ class GroupFilterSet(BaseFilterSet):
def search(self, queryset, name, value): def search(self, queryset, name, value):
if not value.strip(): if not value.strip():
return queryset return queryset
return queryset.filter(name__icontains=value) return queryset.filter(
Q(name__icontains=value) |
Q(description__icontains=value)
)
class UserFilterSet(BaseFilterSet): class UserFilterSet(BaseFilterSet):

View File

@ -10,6 +10,7 @@ from utilities.forms.rendering import FieldSet
from utilities.forms.widgets import BulkEditNullBooleanSelect, DateTimePicker from utilities.forms.widgets import BulkEditNullBooleanSelect, DateTimePicker
__all__ = ( __all__ = (
'GroupBulkEditForm',
'ObjectPermissionBulkEditForm', 'ObjectPermissionBulkEditForm',
'UserBulkEditForm', 'UserBulkEditForm',
'TokenBulkEditForm', 'TokenBulkEditForm',
@ -54,6 +55,24 @@ class UserBulkEditForm(forms.Form):
nullable_fields = ('first_name', 'last_name') nullable_fields = ('first_name', 'last_name')
class GroupBulkEditForm(forms.Form):
pk = forms.ModelMultipleChoiceField(
queryset=Group.objects.all(),
widget=forms.MultipleHiddenInput
)
description = forms.CharField(
label=_('Description'),
max_length=200,
required=False
)
model = User
fieldsets = (
FieldSet('description'),
)
nullable_fields = ('description',)
class ObjectPermissionBulkEditForm(forms.Form): class ObjectPermissionBulkEditForm(forms.Form):
pk = forms.ModelMultipleChoiceField( pk = forms.ModelMultipleChoiceField(
queryset=ObjectPermission.objects.all(), queryset=ObjectPermission.objects.all(),

View File

@ -15,9 +15,7 @@ class GroupImportForm(CSVModelForm):
class Meta: class Meta:
model = Group model = Group
fields = ( fields = ('name', 'description')
'name',
)
class UserImportForm(CSVModelForm): class UserImportForm(CSVModelForm):

View File

@ -19,12 +19,12 @@ from utilities.forms.widgets import DateTimePicker
from utilities.permissions import qs_filter_from_constraints from utilities.permissions import qs_filter_from_constraints
__all__ = ( __all__ = (
'UserTokenForm',
'GroupForm', 'GroupForm',
'ObjectPermissionForm', 'ObjectPermissionForm',
'TokenForm', 'TokenForm',
'UserConfigForm', 'UserConfigForm',
'UserForm', 'UserForm',
'UserTokenForm',
'TokenForm', 'TokenForm',
) )
@ -237,7 +237,7 @@ class GroupForm(forms.ModelForm):
) )
fieldsets = ( fieldsets = (
FieldSet('name'), FieldSet('name', 'description'),
FieldSet('users', name=_('Users')), FieldSet('users', name=_('Users')),
FieldSet('object_permissions', name=_('Permissions')), FieldSet('object_permissions', name=_('Permissions')),
) )
@ -245,7 +245,7 @@ class GroupForm(forms.ModelForm):
class Meta: class Meta:
model = Group model = Group
fields = [ fields = [
'name', 'users', 'object_permissions', 'name', 'description', 'users', 'object_permissions',
] ]
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):

View File

@ -68,10 +68,7 @@ class GroupTable(NetBoxTable):
class Meta(NetBoxTable.Meta): class Meta(NetBoxTable.Meta):
model = Group model = Group
fields = ( fields = ('pk', 'id', 'name', 'users_count', 'description')
'pk', 'id', 'name', 'users_count',
)
default_columns = ('pk', 'name', 'users_count', )
class ObjectPermissionTable(NetBoxTable): class ObjectPermissionTable(NetBoxTable):

View File

@ -66,6 +66,7 @@ class GroupTestCase(
ViewTestCases.DeleteObjectViewTestCase, ViewTestCases.DeleteObjectViewTestCase,
ViewTestCases.ListObjectsViewTestCase, ViewTestCases.ListObjectsViewTestCase,
ViewTestCases.BulkImportObjectsViewTestCase, ViewTestCases.BulkImportObjectsViewTestCase,
ViewTestCases.BulkEditObjectsViewTestCase,
ViewTestCases.BulkDeleteObjectsViewTestCase, ViewTestCases.BulkDeleteObjectsViewTestCase,
): ):
model = Group model = Group
@ -99,6 +100,10 @@ class GroupTestCase(
f"{groups[2].pk},group9", f"{groups[2].pk},group9",
) )
cls.bulk_edit_data = {
'description': 'New description',
}
class ObjectPermissionTestCase( class ObjectPermissionTestCase(
ViewTestCases.GetObjectViewTestCase, ViewTestCases.GetObjectViewTestCase,

View File

@ -25,6 +25,7 @@ urlpatterns = [
# Groups # Groups
path('groups/', views.GroupListView.as_view(), name='group_list'), path('groups/', views.GroupListView.as_view(), name='group_list'),
path('groups/add/', views.GroupEditView.as_view(), name='group_add'), path('groups/add/', views.GroupEditView.as_view(), name='group_add'),
path('groups/edit/', views.GroupBulkEditView.as_view(), name='group_bulk_edit'),
path('groups/import/', views.GroupBulkImportView.as_view(), name='group_import'), path('groups/import/', views.GroupBulkImportView.as_view(), name='group_import'),
path('groups/delete/', views.GroupBulkDeleteView.as_view(), name='group_bulk_delete'), path('groups/delete/', views.GroupBulkDeleteView.as_view(), name='group_bulk_delete'),
path('groups/<int:pk>/', include(get_model_urls('users', 'group'))), path('groups/<int:pk>/', include(get_model_urls('users', 'group'))),

View File

@ -138,6 +138,13 @@ class GroupBulkImportView(generic.BulkImportView):
model_form = forms.GroupImportForm model_form = forms.GroupImportForm
class GroupBulkEditView(generic.BulkEditView):
queryset = Group.objects.all()
filterset = filtersets.GroupFilterSet
table = tables.GroupTable
form = forms.GroupBulkEditForm
class GroupBulkDeleteView(generic.BulkDeleteView): class GroupBulkDeleteView(generic.BulkDeleteView):
queryset = Group.objects.annotate(users_count=Count('user')).order_by('name') queryset = Group.objects.annotate(users_count=Count('user')).order_by('name')
filterset = filtersets.GroupFilterSet filterset = filtersets.GroupFilterSet