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

85 lines
2.4 KiB
Python
Raw Normal View History

2017-03-08 11:34:47 -05:00
from django import forms
from django.contrib.auth.forms import AuthenticationForm, PasswordChangeForm as DjangoPasswordChangeForm
2016-03-01 11:23:03 -05:00
from utilities.forms import BootstrapMixin, DateTimePicker, StaticSelect
from utilities.utils import flatten_dict
from .models import Token, UserConfig
from .preferences import PREFERENCES
2016-03-01 11:23:03 -05:00
class LoginForm(BootstrapMixin, AuthenticationForm):
pass
2016-03-01 11:23:03 -05:00
class PasswordChangeForm(BootstrapMixin, DjangoPasswordChangeForm):
2016-03-01 11:23:03 -05:00
pass
2017-03-08 11:34:47 -05:00
class UserConfigFormMetaclass(forms.models.ModelFormMetaclass):
def __new__(mcs, name, bases, attrs):
# Emulate a declared field for each supported user preference
preference_fields = {}
for field_name, preference in PREFERENCES.items():
field_kwargs = {
'label': preference.label,
'choices': preference.choices,
'help_text': preference.description,
'coerce': preference.coerce,
'required': False,
'widget': StaticSelect,
}
preference_fields[field_name] = forms.TypedChoiceField(**field_kwargs)
attrs.update(preference_fields)
return super().__new__(mcs, name, bases, attrs)
class UserConfigForm(BootstrapMixin, forms.ModelForm, metaclass=UserConfigFormMetaclass):
class Meta:
model = UserConfig
fields = ()
fieldsets = (
('User Interface', (
'pagination.per_page',
'ui.colormode',
)),
('Miscellaneous', (
'data_format',
)),
)
def __init__(self, *args, instance=None, **kwargs):
# Get initial data from UserConfig instance
initial_data = flatten_dict(instance.data)
kwargs['initial'] = initial_data
super().__init__(*args, instance=instance, **kwargs)
def save(self, *args, **kwargs):
# Set UserConfig data
for pref_name, value in self.cleaned_data.items():
self.instance.set(pref_name, value, commit=False)
return super().save(*args, **kwargs)
2017-03-08 11:34:47 -05:00
class TokenForm(BootstrapMixin, forms.ModelForm):
2018-11-27 11:57:29 -05:00
key = forms.CharField(
required=False,
help_text="If no key is provided, one will be generated automatically."
)
2017-03-08 11:34:47 -05:00
class Meta:
model = Token
2018-11-27 11:57:29 -05:00
fields = [
'key', 'write_enabled', 'expires', 'description',
]
2019-12-28 22:55:00 +00:00
widgets = {
'expires': DateTimePicker(),
2017-03-08 11:34:47 -05:00
}