2021-09-28 10:44:53 -04:00
|
|
|
from django import forms
|
2023-07-31 23:52:38 +07:00
|
|
|
from django.utils.translation import gettext_lazy as _
|
2021-09-28 10:44:53 -04:00
|
|
|
|
|
|
|
|
from extras.choices import *
|
|
|
|
|
from extras.models import *
|
2024-07-22 08:12:04 -04:00
|
|
|
from netbox.events import get_event_type_choices
|
2023-08-01 23:35:47 +05:30
|
|
|
from netbox.forms import NetBoxModelBulkEditForm
|
2025-07-31 15:58:28 -04:00
|
|
|
from netbox.forms.mixins import ChangelogMessageMixin
|
2023-04-14 10:33:53 -04:00
|
|
|
from utilities.forms import BulkEditForm, add_blank_choice
|
2024-04-19 14:50:42 -04:00
|
|
|
from utilities.forms.fields import ColorField, CommentField, DynamicModelChoiceField
|
2024-06-25 08:37:10 -04:00
|
|
|
from utilities.forms.rendering import FieldSet
|
2023-04-14 10:33:53 -04:00
|
|
|
from utilities.forms.widgets import BulkEditNullBooleanSelect
|
2021-09-28 10:44:53 -04:00
|
|
|
|
|
|
|
|
__all__ = (
|
|
|
|
|
'ConfigContextBulkEditForm',
|
2023-02-17 08:33:08 -05:00
|
|
|
'ConfigTemplateBulkEditForm',
|
2021-09-28 10:44:53 -04:00
|
|
|
'CustomFieldBulkEditForm',
|
2023-07-19 10:26:24 -04:00
|
|
|
'CustomFieldChoiceSetBulkEditForm',
|
2021-09-28 10:44:53 -04:00
|
|
|
'CustomLinkBulkEditForm',
|
2023-11-30 13:36:33 -08:00
|
|
|
'EventRuleBulkEditForm',
|
2021-09-28 10:44:53 -04:00
|
|
|
'ExportTemplateBulkEditForm',
|
|
|
|
|
'JournalEntryBulkEditForm',
|
2024-07-15 14:24:11 -04:00
|
|
|
'NotificationGroupBulkEditForm',
|
2022-11-02 12:27:53 -04:00
|
|
|
'SavedFilterBulkEditForm',
|
2025-04-10 16:48:02 -04:00
|
|
|
'TableConfigBulkEditForm',
|
2021-09-28 10:44:53 -04:00
|
|
|
'TagBulkEditForm',
|
|
|
|
|
'WebhookBulkEditForm',
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
2025-07-31 15:58:28 -04:00
|
|
|
class CustomFieldBulkEditForm(ChangelogMessageMixin, BulkEditForm):
|
2021-09-28 10:44:53 -04:00
|
|
|
pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
queryset=CustomField.objects.all(),
|
|
|
|
|
widget=forms.MultipleHiddenInput
|
|
|
|
|
)
|
2022-04-15 14:45:28 -04:00
|
|
|
group_name = forms.CharField(
|
2023-07-31 23:52:38 +07:00
|
|
|
label=_('Group name'),
|
2022-04-15 14:45:28 -04:00
|
|
|
required=False
|
|
|
|
|
)
|
2021-09-28 10:44:53 -04:00
|
|
|
description = forms.CharField(
|
2023-07-31 23:52:38 +07:00
|
|
|
label=_('Description'),
|
2021-09-28 10:44:53 -04:00
|
|
|
required=False
|
|
|
|
|
)
|
|
|
|
|
required = forms.NullBooleanField(
|
2023-07-31 23:52:38 +07:00
|
|
|
label=_('Required'),
|
2021-09-28 10:44:53 -04:00
|
|
|
required=False,
|
|
|
|
|
widget=BulkEditNullBooleanSelect()
|
|
|
|
|
)
|
2024-08-30 13:44:03 -04:00
|
|
|
unique = forms.NullBooleanField(
|
|
|
|
|
label=_('Must be unique'),
|
|
|
|
|
required=False,
|
|
|
|
|
widget=BulkEditNullBooleanSelect()
|
|
|
|
|
)
|
2021-09-28 10:44:53 -04:00
|
|
|
weight = forms.IntegerField(
|
2023-07-31 23:52:38 +07:00
|
|
|
label=_('Weight'),
|
2021-09-28 10:44:53 -04:00
|
|
|
required=False
|
|
|
|
|
)
|
2023-07-19 10:26:24 -04:00
|
|
|
choice_set = DynamicModelChoiceField(
|
|
|
|
|
queryset=CustomFieldChoiceSet.objects.all(),
|
|
|
|
|
required=False
|
|
|
|
|
)
|
2023-11-20 13:06:34 -05:00
|
|
|
ui_visible = forms.ChoiceField(
|
|
|
|
|
label=_("UI visible"),
|
|
|
|
|
choices=add_blank_choice(CustomFieldUIVisibleChoices),
|
|
|
|
|
required=False
|
|
|
|
|
)
|
|
|
|
|
ui_editable = forms.ChoiceField(
|
|
|
|
|
label=_("UI editable"),
|
|
|
|
|
choices=add_blank_choice(CustomFieldUIEditableChoices),
|
|
|
|
|
required=False
|
2022-05-24 10:12:32 +02:00
|
|
|
)
|
2022-11-17 10:25:50 -08:00
|
|
|
is_cloneable = forms.NullBooleanField(
|
2023-07-31 23:52:38 +07:00
|
|
|
label=_('Is cloneable'),
|
2022-11-17 10:25:50 -08:00
|
|
|
required=False,
|
|
|
|
|
widget=BulkEditNullBooleanSelect()
|
|
|
|
|
)
|
2024-06-25 08:37:10 -04:00
|
|
|
validation_minimum = forms.IntegerField(
|
|
|
|
|
label=_('Minimum value'),
|
|
|
|
|
required=False,
|
|
|
|
|
)
|
|
|
|
|
validation_maximum = forms.IntegerField(
|
|
|
|
|
label=_('Maximum value'),
|
|
|
|
|
required=False,
|
|
|
|
|
)
|
|
|
|
|
validation_regex = forms.CharField(
|
|
|
|
|
label=_('Validation regex'),
|
|
|
|
|
required=False
|
|
|
|
|
)
|
2024-04-19 14:50:42 -04:00
|
|
|
comments = CommentField()
|
2021-09-28 10:44:53 -04:00
|
|
|
|
2024-06-25 08:37:10 -04:00
|
|
|
fieldsets = (
|
2024-08-30 13:44:03 -04:00
|
|
|
FieldSet('group_name', 'description', 'weight', 'required', 'unique', 'choice_set', name=_('Attributes')),
|
2024-06-25 08:37:10 -04:00
|
|
|
FieldSet('ui_visible', 'ui_editable', 'is_cloneable', name=_('Behavior')),
|
2024-08-30 13:44:03 -04:00
|
|
|
FieldSet('validation_minimum', 'validation_maximum', 'validation_regex', name=_('Validation')),
|
2024-06-25 08:37:10 -04:00
|
|
|
)
|
2023-07-19 10:26:24 -04:00
|
|
|
nullable_fields = ('group_name', 'description', 'choice_set')
|
|
|
|
|
|
|
|
|
|
|
2025-07-31 15:58:28 -04:00
|
|
|
class CustomFieldChoiceSetBulkEditForm(ChangelogMessageMixin, BulkEditForm):
|
2023-07-19 10:26:24 -04:00
|
|
|
pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
queryset=CustomFieldChoiceSet.objects.all(),
|
|
|
|
|
widget=forms.MultipleHiddenInput
|
|
|
|
|
)
|
2023-07-28 11:24:21 -04:00
|
|
|
base_choices = forms.ChoiceField(
|
|
|
|
|
choices=add_blank_choice(CustomFieldChoiceSetBaseChoices),
|
|
|
|
|
required=False
|
|
|
|
|
)
|
2023-07-19 10:26:24 -04:00
|
|
|
description = forms.CharField(
|
|
|
|
|
required=False
|
|
|
|
|
)
|
|
|
|
|
order_alphabetically = forms.NullBooleanField(
|
|
|
|
|
required=False,
|
|
|
|
|
widget=BulkEditNullBooleanSelect()
|
|
|
|
|
)
|
|
|
|
|
|
2023-07-28 11:24:21 -04:00
|
|
|
nullable_fields = ('base_choices', 'description')
|
2021-09-28 10:44:53 -04:00
|
|
|
|
|
|
|
|
|
2025-07-31 15:58:28 -04:00
|
|
|
class CustomLinkBulkEditForm(ChangelogMessageMixin, BulkEditForm):
|
2021-09-28 10:44:53 -04:00
|
|
|
pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
queryset=CustomLink.objects.all(),
|
|
|
|
|
widget=forms.MultipleHiddenInput
|
|
|
|
|
)
|
2022-01-10 12:11:37 -05:00
|
|
|
enabled = forms.NullBooleanField(
|
2023-07-31 23:52:38 +07:00
|
|
|
label=_('Enabled'),
|
2022-01-10 12:11:37 -05:00
|
|
|
required=False,
|
|
|
|
|
widget=BulkEditNullBooleanSelect()
|
|
|
|
|
)
|
2021-09-28 10:44:53 -04:00
|
|
|
new_window = forms.NullBooleanField(
|
2023-07-31 23:52:38 +07:00
|
|
|
label=_('New window'),
|
2021-09-28 10:44:53 -04:00
|
|
|
required=False,
|
|
|
|
|
widget=BulkEditNullBooleanSelect()
|
|
|
|
|
)
|
|
|
|
|
weight = forms.IntegerField(
|
2023-07-31 23:52:38 +07:00
|
|
|
label=_('Weight'),
|
2021-09-28 10:44:53 -04:00
|
|
|
required=False
|
|
|
|
|
)
|
|
|
|
|
button_class = forms.ChoiceField(
|
2023-07-31 23:52:38 +07:00
|
|
|
label=_('Button class'),
|
2022-02-11 15:34:41 -05:00
|
|
|
choices=add_blank_choice(CustomLinkButtonClassChoices),
|
2023-02-16 10:25:51 -05:00
|
|
|
required=False
|
2021-09-28 10:44:53 -04:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
2025-07-31 15:58:28 -04:00
|
|
|
class ExportTemplateBulkEditForm(ChangelogMessageMixin, BulkEditForm):
|
2021-09-28 10:44:53 -04:00
|
|
|
pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
queryset=ExportTemplate.objects.all(),
|
|
|
|
|
widget=forms.MultipleHiddenInput
|
|
|
|
|
)
|
|
|
|
|
description = forms.CharField(
|
2023-07-31 23:52:38 +07:00
|
|
|
label=_('Description'),
|
2021-09-28 10:44:53 -04:00
|
|
|
max_length=200,
|
|
|
|
|
required=False
|
|
|
|
|
)
|
|
|
|
|
mime_type = forms.CharField(
|
2023-07-31 23:52:38 +07:00
|
|
|
label=_('MIME type'),
|
2021-09-28 10:44:53 -04:00
|
|
|
max_length=50,
|
|
|
|
|
required=False
|
|
|
|
|
)
|
2025-03-20 08:17:56 -05:00
|
|
|
file_name = forms.CharField(
|
|
|
|
|
label=_('File name'),
|
|
|
|
|
required=False
|
|
|
|
|
)
|
2021-09-28 10:44:53 -04:00
|
|
|
file_extension = forms.CharField(
|
2023-07-31 23:52:38 +07:00
|
|
|
label=_('File extension'),
|
2021-09-28 10:44:53 -04:00
|
|
|
max_length=15,
|
|
|
|
|
required=False
|
|
|
|
|
)
|
|
|
|
|
as_attachment = forms.NullBooleanField(
|
2023-07-31 23:52:38 +07:00
|
|
|
label=_('As attachment'),
|
2021-09-28 10:44:53 -04:00
|
|
|
required=False,
|
|
|
|
|
widget=BulkEditNullBooleanSelect()
|
|
|
|
|
)
|
|
|
|
|
|
2025-03-20 08:17:56 -05:00
|
|
|
nullable_fields = ('description', 'mime_type', 'file_name', 'file_extension')
|
2021-09-28 10:44:53 -04:00
|
|
|
|
|
|
|
|
|
2025-07-31 15:58:28 -04:00
|
|
|
class SavedFilterBulkEditForm(ChangelogMessageMixin, BulkEditForm):
|
2022-11-02 12:27:53 -04:00
|
|
|
pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
queryset=SavedFilter.objects.all(),
|
|
|
|
|
widget=forms.MultipleHiddenInput
|
|
|
|
|
)
|
|
|
|
|
description = forms.CharField(
|
2023-07-31 23:52:38 +07:00
|
|
|
label=_('Description'),
|
2022-11-02 12:27:53 -04:00
|
|
|
max_length=200,
|
|
|
|
|
required=False
|
|
|
|
|
)
|
|
|
|
|
weight = forms.IntegerField(
|
2023-07-31 23:52:38 +07:00
|
|
|
label=_('Weight'),
|
2022-11-02 12:27:53 -04:00
|
|
|
required=False
|
|
|
|
|
)
|
|
|
|
|
enabled = forms.NullBooleanField(
|
2023-07-31 23:52:38 +07:00
|
|
|
label=_('Enabled'),
|
2022-11-02 12:27:53 -04:00
|
|
|
required=False,
|
|
|
|
|
widget=BulkEditNullBooleanSelect()
|
|
|
|
|
)
|
|
|
|
|
shared = forms.NullBooleanField(
|
2023-07-31 23:52:38 +07:00
|
|
|
label=_('Shared'),
|
2022-11-02 12:27:53 -04:00
|
|
|
required=False,
|
|
|
|
|
widget=BulkEditNullBooleanSelect()
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
nullable_fields = ('description',)
|
|
|
|
|
|
|
|
|
|
|
2025-04-10 16:48:02 -04:00
|
|
|
class TableConfigBulkEditForm(BulkEditForm):
|
|
|
|
|
pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
queryset=TableConfig.objects.all(),
|
|
|
|
|
widget=forms.MultipleHiddenInput
|
|
|
|
|
)
|
|
|
|
|
description = forms.CharField(
|
|
|
|
|
label=_('Description'),
|
|
|
|
|
max_length=200,
|
|
|
|
|
required=False
|
|
|
|
|
)
|
|
|
|
|
weight = forms.IntegerField(
|
|
|
|
|
label=_('Weight'),
|
|
|
|
|
required=False
|
|
|
|
|
)
|
|
|
|
|
enabled = forms.NullBooleanField(
|
|
|
|
|
label=_('Enabled'),
|
|
|
|
|
required=False,
|
|
|
|
|
widget=BulkEditNullBooleanSelect()
|
|
|
|
|
)
|
|
|
|
|
shared = forms.NullBooleanField(
|
|
|
|
|
label=_('Shared'),
|
|
|
|
|
required=False,
|
|
|
|
|
widget=BulkEditNullBooleanSelect()
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
nullable_fields = ('description',)
|
|
|
|
|
|
|
|
|
|
|
2023-08-01 23:35:47 +05:30
|
|
|
class WebhookBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
|
|
model = Webhook
|
|
|
|
|
|
2021-09-28 10:44:53 -04:00
|
|
|
pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
queryset=Webhook.objects.all(),
|
|
|
|
|
widget=forms.MultipleHiddenInput
|
|
|
|
|
)
|
2023-11-30 17:02:45 -05:00
|
|
|
description = forms.CharField(
|
|
|
|
|
label=_('Description'),
|
|
|
|
|
max_length=200,
|
|
|
|
|
required=False
|
|
|
|
|
)
|
2023-11-30 13:36:33 -08:00
|
|
|
http_method = forms.ChoiceField(
|
|
|
|
|
choices=add_blank_choice(WebhookHttpMethodChoices),
|
|
|
|
|
required=False,
|
|
|
|
|
label=_('HTTP method')
|
|
|
|
|
)
|
|
|
|
|
payload_url = forms.CharField(
|
|
|
|
|
required=False,
|
|
|
|
|
label=_('Payload URL')
|
|
|
|
|
)
|
|
|
|
|
ssl_verification = forms.NullBooleanField(
|
|
|
|
|
required=False,
|
|
|
|
|
widget=BulkEditNullBooleanSelect(),
|
|
|
|
|
label=_('SSL verification')
|
|
|
|
|
)
|
|
|
|
|
secret = forms.CharField(
|
|
|
|
|
label=_('Secret'),
|
|
|
|
|
required=False
|
|
|
|
|
)
|
|
|
|
|
ca_file_path = forms.CharField(
|
|
|
|
|
required=False,
|
|
|
|
|
label=_('CA file path')
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
nullable_fields = ('secret', 'ca_file_path')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class EventRuleBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
|
|
model = EventRule
|
|
|
|
|
|
|
|
|
|
pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
queryset=EventRule.objects.all(),
|
|
|
|
|
widget=forms.MultipleHiddenInput
|
|
|
|
|
)
|
2021-09-28 10:44:53 -04:00
|
|
|
enabled = forms.NullBooleanField(
|
2023-07-31 23:52:38 +07:00
|
|
|
label=_('Enabled'),
|
2021-09-28 10:44:53 -04:00
|
|
|
required=False,
|
|
|
|
|
widget=BulkEditNullBooleanSelect()
|
|
|
|
|
)
|
2024-07-22 08:12:04 -04:00
|
|
|
event_types = forms.MultipleChoiceField(
|
|
|
|
|
choices=get_event_type_choices(),
|
2021-09-28 10:44:53 -04:00
|
|
|
required=False,
|
2024-07-22 08:12:04 -04:00
|
|
|
label=_('Event types')
|
2023-02-28 14:29:00 -05:00
|
|
|
)
|
2024-07-22 08:12:04 -04:00
|
|
|
description = forms.CharField(
|
|
|
|
|
label=_('Description'),
|
|
|
|
|
max_length=200,
|
|
|
|
|
required=False
|
2023-02-28 14:29:00 -05:00
|
|
|
)
|
2021-09-28 10:44:53 -04:00
|
|
|
|
2024-07-22 08:12:04 -04:00
|
|
|
nullable_fields = ('description', 'conditions')
|
2021-09-28 10:44:53 -04:00
|
|
|
|
|
|
|
|
|
2025-07-31 15:58:28 -04:00
|
|
|
class TagBulkEditForm(ChangelogMessageMixin, BulkEditForm):
|
2021-09-28 10:44:53 -04:00
|
|
|
pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
queryset=Tag.objects.all(),
|
|
|
|
|
widget=forms.MultipleHiddenInput
|
|
|
|
|
)
|
|
|
|
|
color = ColorField(
|
2023-07-31 23:52:38 +07:00
|
|
|
label=_('Color'),
|
2021-09-28 10:44:53 -04:00
|
|
|
required=False
|
|
|
|
|
)
|
|
|
|
|
description = forms.CharField(
|
2023-07-31 23:52:38 +07:00
|
|
|
label=_('Description'),
|
2021-09-28 10:44:53 -04:00
|
|
|
max_length=200,
|
|
|
|
|
required=False
|
|
|
|
|
)
|
2025-03-19 12:17:35 -05:00
|
|
|
weight = forms.IntegerField(
|
|
|
|
|
label=_('Weight'),
|
|
|
|
|
required=False
|
|
|
|
|
)
|
2021-09-28 10:44:53 -04:00
|
|
|
|
2022-01-31 16:15:40 -05:00
|
|
|
nullable_fields = ('description',)
|
2021-09-28 10:44:53 -04:00
|
|
|
|
|
|
|
|
|
2025-07-31 15:58:28 -04:00
|
|
|
class ConfigContextBulkEditForm(ChangelogMessageMixin, BulkEditForm):
|
2021-09-28 10:44:53 -04:00
|
|
|
pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
queryset=ConfigContext.objects.all(),
|
|
|
|
|
widget=forms.MultipleHiddenInput
|
|
|
|
|
)
|
|
|
|
|
weight = forms.IntegerField(
|
2023-07-31 23:52:38 +07:00
|
|
|
label=_('Weight'),
|
2021-09-28 10:44:53 -04:00
|
|
|
required=False,
|
|
|
|
|
min_value=0
|
|
|
|
|
)
|
|
|
|
|
is_active = forms.NullBooleanField(
|
2023-07-31 23:52:38 +07:00
|
|
|
label=_('Is active'),
|
2021-09-28 10:44:53 -04:00
|
|
|
required=False,
|
|
|
|
|
widget=BulkEditNullBooleanSelect()
|
|
|
|
|
)
|
|
|
|
|
description = forms.CharField(
|
2023-07-31 23:52:38 +07:00
|
|
|
label=_('Description'),
|
2021-09-28 10:44:53 -04:00
|
|
|
required=False,
|
|
|
|
|
max_length=100
|
|
|
|
|
)
|
|
|
|
|
|
2022-01-31 16:15:40 -05:00
|
|
|
nullable_fields = ('description',)
|
2021-09-28 10:44:53 -04:00
|
|
|
|
|
|
|
|
|
2025-07-31 15:58:28 -04:00
|
|
|
class ConfigTemplateBulkEditForm(ChangelogMessageMixin, BulkEditForm):
|
2023-02-17 08:33:08 -05:00
|
|
|
pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
queryset=ConfigTemplate.objects.all(),
|
|
|
|
|
widget=forms.MultipleHiddenInput
|
|
|
|
|
)
|
|
|
|
|
description = forms.CharField(
|
2023-07-31 23:52:38 +07:00
|
|
|
label=_('Description'),
|
2023-02-17 08:33:08 -05:00
|
|
|
max_length=200,
|
|
|
|
|
required=False
|
|
|
|
|
)
|
2025-04-08 11:37:15 -03:00
|
|
|
mime_type = forms.CharField(
|
|
|
|
|
label=_('MIME type'),
|
|
|
|
|
max_length=50,
|
|
|
|
|
required=False
|
|
|
|
|
)
|
|
|
|
|
file_name = forms.CharField(
|
|
|
|
|
label=_('File name'),
|
|
|
|
|
required=False
|
|
|
|
|
)
|
|
|
|
|
file_extension = forms.CharField(
|
|
|
|
|
label=_('File extension'),
|
|
|
|
|
max_length=15,
|
|
|
|
|
required=False
|
|
|
|
|
)
|
|
|
|
|
as_attachment = forms.NullBooleanField(
|
|
|
|
|
label=_('As attachment'),
|
|
|
|
|
required=False,
|
|
|
|
|
widget=BulkEditNullBooleanSelect()
|
|
|
|
|
)
|
2023-02-17 08:33:08 -05:00
|
|
|
|
2025-04-08 11:37:15 -03:00
|
|
|
nullable_fields = ('description', 'mime_type', 'file_name', 'file_extension')
|
2023-02-17 08:33:08 -05:00
|
|
|
|
|
|
|
|
|
2025-07-31 15:58:28 -04:00
|
|
|
class JournalEntryBulkEditForm(ChangelogMessageMixin, BulkEditForm):
|
2021-09-28 10:44:53 -04:00
|
|
|
pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
queryset=JournalEntry.objects.all(),
|
|
|
|
|
widget=forms.MultipleHiddenInput
|
|
|
|
|
)
|
|
|
|
|
kind = forms.ChoiceField(
|
2023-07-31 23:52:38 +07:00
|
|
|
label=_('Kind'),
|
2022-02-11 15:34:41 -05:00
|
|
|
choices=add_blank_choice(JournalEntryKindChoices),
|
2021-09-28 10:44:53 -04:00
|
|
|
required=False
|
|
|
|
|
)
|
2024-04-19 14:50:42 -04:00
|
|
|
comments = CommentField()
|
2024-07-15 14:24:11 -04:00
|
|
|
|
|
|
|
|
|
2025-07-31 15:58:28 -04:00
|
|
|
class NotificationGroupBulkEditForm(ChangelogMessageMixin, BulkEditForm):
|
2024-07-15 14:24:11 -04:00
|
|
|
pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
queryset=NotificationGroup.objects.all(),
|
|
|
|
|
widget=forms.MultipleHiddenInput
|
|
|
|
|
)
|
|
|
|
|
description = forms.CharField(
|
|
|
|
|
label=_('Description'),
|
|
|
|
|
max_length=200,
|
|
|
|
|
required=False
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
nullable_fields = ('description',)
|