From 6388705e57a94be300e7970bc6070ba03ed5f347 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 3 Oct 2025 10:45:54 -0400 Subject: [PATCH] Clean up TokenForm --- netbox/users/forms/filtersets.py | 3 ++- netbox/users/forms/model_forms.py | 18 +++++------------- 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/netbox/users/forms/filtersets.py b/netbox/users/forms/filtersets.py index 96f5a48d2..32e52b5f9 100644 --- a/netbox/users/forms/filtersets.py +++ b/netbox/users/forms/filtersets.py @@ -8,6 +8,7 @@ from users.models import Group, ObjectPermission, Token, User from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm from utilities.forms.fields import DynamicModelMultipleChoiceField from utilities.forms.rendering import FieldSet +from utilities.forms.utils import add_blank_choice from utilities.forms.widgets import DateTimePicker __all__ = ( @@ -114,7 +115,7 @@ class TokenFilterForm(SavedFiltersMixin, FilterForm): FieldSet('version', 'user_id', 'write_enabled', 'expires', 'last_used', name=_('Token')), ) version = forms.ChoiceField( - choices=TokenVersionChoices, + choices=add_blank_choice(TokenVersionChoices), required=False, ) user_id = DynamicModelMultipleChoiceField( diff --git a/netbox/users/forms/model_forms.py b/netbox/users/forms/model_forms.py index 9b6c8aaba..582062ebb 100644 --- a/netbox/users/forms/model_forms.py +++ b/netbox/users/forms/model_forms.py @@ -16,11 +16,7 @@ from users.choices import TokenVersionChoices from users.constants import * from users.models import * from utilities.data import flatten_dict -from utilities.forms.fields import ( - ContentTypeMultipleChoiceField, - DynamicModelMultipleChoiceField, - JSONField, -) +from utilities.forms.fields import ContentTypeMultipleChoiceField, DynamicModelMultipleChoiceField, JSONField from utilities.forms.rendering import FieldSet from utilities.forms.widgets import DateTimePicker, SplitMultiSelectWidget from utilities.permissions import qs_filter_from_constraints @@ -155,17 +151,17 @@ class UserTokenForm(forms.ModelForm): # Omit the key field when editing an existing token if token retrieval is not permitted if self.instance.v1 and settings.ALLOW_TOKEN_RETRIEVAL: - self.fields['token'].initial = self.instance.key + self.initial['token'] = self.instance.plaintext else: del self.fields['token'] # Generate an initial random key if none has been specified - if self.instance._state.adding and not self.initial.get('token'): + elif self.instance._state.adding and not self.initial.get('token'): self.initial['version'] = TokenVersionChoices.V2 self.initial['token'] = Token.generate() def save(self, commit=True): - if self.cleaned_data.get('token'): + if self.instance._state.adding and self.cleaned_data.get('token'): self.instance.token = self.cleaned_data['token'] return super().save(commit=commit) @@ -177,14 +173,10 @@ class TokenForm(UserTokenForm): label=_('User') ) - class Meta: - model = Token + class Meta(UserTokenForm.Meta): fields = [ 'version', 'token', 'user', 'write_enabled', 'expires', 'description', 'allowed_ips', ] - widgets = { - 'expires': DateTimePicker(), - } class UserForm(forms.ModelForm):