mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-25 08:46:10 -06:00
12589 review changes and add localization
This commit is contained in:
parent
b851f33e81
commit
e2cc63fb26
@ -1,5 +1,5 @@
|
|||||||
from django import forms
|
from django import forms
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from netbox.forms import NetBoxModelBulkEditForm
|
from netbox.forms import NetBoxModelBulkEditForm
|
||||||
from users.models import *
|
from users.models import *
|
||||||
@ -16,14 +16,17 @@ __all__ = (
|
|||||||
|
|
||||||
class UserBulkEditForm(BootstrapMixin, forms.Form):
|
class UserBulkEditForm(BootstrapMixin, forms.Form):
|
||||||
pk = forms.ModelMultipleChoiceField(
|
pk = forms.ModelMultipleChoiceField(
|
||||||
|
label=_('Pk'),
|
||||||
queryset=None, # Set from self.model on init
|
queryset=None, # Set from self.model on init
|
||||||
widget=forms.MultipleHiddenInput
|
widget=forms.MultipleHiddenInput
|
||||||
)
|
)
|
||||||
first_name = forms.CharField(
|
first_name = forms.CharField(
|
||||||
|
label=_('First name'),
|
||||||
max_length=150,
|
max_length=150,
|
||||||
required=False
|
required=False
|
||||||
)
|
)
|
||||||
last_name = forms.CharField(
|
last_name = forms.CharField(
|
||||||
|
label=_('Last name'),
|
||||||
max_length=150,
|
max_length=150,
|
||||||
required=False
|
required=False
|
||||||
)
|
)
|
||||||
@ -53,14 +56,17 @@ class UserBulkEditForm(BootstrapMixin, forms.Form):
|
|||||||
|
|
||||||
class ObjectPermissionBulkEditForm(BootstrapMixin, forms.Form):
|
class ObjectPermissionBulkEditForm(BootstrapMixin, forms.Form):
|
||||||
pk = forms.ModelMultipleChoiceField(
|
pk = forms.ModelMultipleChoiceField(
|
||||||
|
label=_('Pk'),
|
||||||
queryset=None, # Set from self.model on init
|
queryset=None, # Set from self.model on init
|
||||||
widget=forms.MultipleHiddenInput
|
widget=forms.MultipleHiddenInput
|
||||||
)
|
)
|
||||||
description = forms.CharField(
|
description = forms.CharField(
|
||||||
|
label=_('Description'),
|
||||||
max_length=200,
|
max_length=200,
|
||||||
required=False
|
required=False
|
||||||
)
|
)
|
||||||
enabled = forms.BooleanField(
|
enabled = forms.BooleanField(
|
||||||
|
label=_('Enabled'),
|
||||||
required=False,
|
required=False,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from django import forms
|
from django import forms
|
||||||
|
|
||||||
from users.models import *
|
from users.models import *
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from netbox.forms import NetBoxModelImportForm
|
from netbox.forms import NetBoxModelImportForm
|
||||||
from utilities.forms import BootstrapMixin
|
from utilities.forms import BootstrapMixin
|
||||||
from utilities.forms.fields import CSVChoiceField, CSVModelChoiceField, SlugField
|
from utilities.forms.fields import CSVChoiceField, CSVModelChoiceField, SlugField
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
from django import forms
|
from django import forms
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from circuits.choices import CircuitCommitRateChoices, CircuitStatusChoices
|
from circuits.choices import CircuitCommitRateChoices, CircuitStatusChoices
|
||||||
from circuits.models import *
|
from circuits.models import *
|
||||||
@ -23,28 +23,28 @@ class UserFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm):
|
|||||||
model = NetBoxUser
|
model = NetBoxUser
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
(None, ('q', 'filter_id',)),
|
(None, ('q', 'filter_id',)),
|
||||||
('Security', ('is_superuser', 'is_staff', 'is_active')),
|
(_('Security'), ('is_superuser', 'is_staff', 'is_active')),
|
||||||
)
|
)
|
||||||
is_superuser = forms.NullBooleanField(
|
is_superuser = forms.NullBooleanField(
|
||||||
required=False,
|
required=False,
|
||||||
widget=forms.Select(
|
widget=forms.Select(
|
||||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||||
),
|
),
|
||||||
label='Is Superuser',
|
label=_('Is Superuser'),
|
||||||
)
|
)
|
||||||
is_staff = forms.NullBooleanField(
|
is_staff = forms.NullBooleanField(
|
||||||
required=False,
|
required=False,
|
||||||
widget=forms.Select(
|
widget=forms.Select(
|
||||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||||
),
|
),
|
||||||
label='Is Staff',
|
label=_('Is Staff'),
|
||||||
)
|
)
|
||||||
is_active = forms.NullBooleanField(
|
is_active = forms.NullBooleanField(
|
||||||
required=False,
|
required=False,
|
||||||
widget=forms.Select(
|
widget=forms.Select(
|
||||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||||
),
|
),
|
||||||
label='Is Active',
|
label=_('Is Active'),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -62,6 +62,7 @@ class ObjectPermissionFilterForm(ContactModelFilterForm, NetBoxModelFilterSetFor
|
|||||||
(None, ('enabled',)),
|
(None, ('enabled',)),
|
||||||
)
|
)
|
||||||
enabled = forms.NullBooleanField(
|
enabled = forms.NullBooleanField(
|
||||||
|
label=_('Enabled'),
|
||||||
required=False,
|
required=False,
|
||||||
widget=forms.Select(
|
widget=forms.Select(
|
||||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||||
|
@ -5,9 +5,10 @@ from django.contrib.auth.forms import AuthenticationForm, PasswordChangeForm as
|
|||||||
from django.contrib.auth.models import Group
|
from django.contrib.auth.models import Group
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.contrib.postgres.forms import SimpleArrayField
|
from django.contrib.postgres.forms import SimpleArrayField
|
||||||
|
from django.core.exceptions import FieldError
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
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_lazy as _
|
||||||
|
|
||||||
from ipam.formfields import IPNetworkFormField
|
from ipam.formfields import IPNetworkFormField
|
||||||
from ipam.validators import prefix_validator
|
from ipam.validators import prefix_validator
|
||||||
@ -18,7 +19,7 @@ from utilities.forms.widgets import DateTimePicker
|
|||||||
from utilities.utils import flatten_dict
|
from utilities.utils import flatten_dict
|
||||||
from users.constants import *
|
from users.constants import *
|
||||||
from users.models import *
|
from users.models import *
|
||||||
|
from utilities.permissions import qs_filter_from_constraints
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
'GroupForm',
|
'GroupForm',
|
||||||
@ -69,17 +70,18 @@ class UserConfigFormMetaclass(forms.models.ModelFormMetaclass):
|
|||||||
|
|
||||||
class UserConfigForm(BootstrapMixin, forms.ModelForm, metaclass=UserConfigFormMetaclass):
|
class UserConfigForm(BootstrapMixin, forms.ModelForm, metaclass=UserConfigFormMetaclass):
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
('User Interface', (
|
(_('User Interface'), (
|
||||||
'pagination.per_page',
|
'pagination.per_page',
|
||||||
'pagination.placement',
|
'pagination.placement',
|
||||||
'ui.colormode',
|
'ui.colormode',
|
||||||
)),
|
)),
|
||||||
('Miscellaneous', (
|
(_('Miscellaneous'), (
|
||||||
'data_format',
|
'data_format',
|
||||||
)),
|
)),
|
||||||
)
|
)
|
||||||
# List of clearable preferences
|
# List of clearable preferences
|
||||||
pk = forms.MultipleChoiceField(
|
pk = forms.MultipleChoiceField(
|
||||||
|
label=_('Pk'),
|
||||||
choices=[],
|
choices=[],
|
||||||
required=False
|
required=False
|
||||||
)
|
)
|
||||||
@ -124,6 +126,7 @@ class UserConfigForm(BootstrapMixin, forms.ModelForm, metaclass=UserConfigFormMe
|
|||||||
|
|
||||||
class TokenForm(BootstrapMixin, forms.ModelForm):
|
class TokenForm(BootstrapMixin, forms.ModelForm):
|
||||||
key = forms.CharField(
|
key = forms.CharField(
|
||||||
|
label=_('Key'),
|
||||||
required=False,
|
required=False,
|
||||||
help_text=_("If no key is provided, one will be generated automatically.")
|
help_text=_("If no key is provided, one will be generated automatically.")
|
||||||
)
|
)
|
||||||
@ -154,15 +157,18 @@ class TokenForm(BootstrapMixin, forms.ModelForm):
|
|||||||
|
|
||||||
class UserForm(BootstrapMixin, forms.ModelForm):
|
class UserForm(BootstrapMixin, forms.ModelForm):
|
||||||
password = forms.CharField(
|
password = forms.CharField(
|
||||||
|
label=_('Password'),
|
||||||
widget=forms.PasswordInput(),
|
widget=forms.PasswordInput(),
|
||||||
required=True,
|
required=True,
|
||||||
)
|
)
|
||||||
confirm_password = forms.CharField(
|
confirm_password = forms.CharField(
|
||||||
|
label=_('Confirm password'),
|
||||||
widget=forms.PasswordInput(),
|
widget=forms.PasswordInput(),
|
||||||
required=True,
|
required=True,
|
||||||
help_text=_("Enter the same password as before, for verification."),
|
help_text=_("Enter the same password as before, for verification."),
|
||||||
)
|
)
|
||||||
groups = DynamicModelMultipleChoiceField(
|
groups = DynamicModelMultipleChoiceField(
|
||||||
|
label=_('Groups'),
|
||||||
required=False,
|
required=False,
|
||||||
queryset=Group.objects.all()
|
queryset=Group.objects.all()
|
||||||
)
|
)
|
||||||
@ -174,10 +180,10 @@ class UserForm(BootstrapMixin, forms.ModelForm):
|
|||||||
)
|
)
|
||||||
|
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
('User', ('username', 'password', 'confirm_password', 'first_name', 'last_name', 'email', )),
|
(_('User'), ('username', 'password', 'confirm_password', 'first_name', 'last_name', 'email', )),
|
||||||
('Groups', ('groups', )),
|
(_('Groups'), ('groups', )),
|
||||||
('Status', ('is_active', 'is_staff', 'is_superuser', )),
|
(_('Status'), ('is_active', 'is_staff', 'is_superuser', )),
|
||||||
('Permissions', ('object_permissions', )),
|
(_('Permissions'), ('object_permissions', )),
|
||||||
)
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
@ -241,6 +247,7 @@ class UserForm(BootstrapMixin, forms.ModelForm):
|
|||||||
|
|
||||||
class GroupForm(BootstrapMixin, forms.ModelForm):
|
class GroupForm(BootstrapMixin, forms.ModelForm):
|
||||||
users = DynamicModelMultipleChoiceField(
|
users = DynamicModelMultipleChoiceField(
|
||||||
|
label=_('Users'),
|
||||||
required=False,
|
required=False,
|
||||||
queryset=get_user_model().objects.all()
|
queryset=get_user_model().objects.all()
|
||||||
)
|
)
|
||||||
@ -253,8 +260,8 @@ class GroupForm(BootstrapMixin, forms.ModelForm):
|
|||||||
|
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
(None, ('name', )),
|
(None, ('name', )),
|
||||||
('Users', ('users', )),
|
(_('Users'), ('users', )),
|
||||||
('Permissions', ('object_permissions', )),
|
(_('Permissions'), ('object_permissions', )),
|
||||||
)
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
@ -278,18 +285,22 @@ class GroupForm(BootstrapMixin, forms.ModelForm):
|
|||||||
|
|
||||||
class ObjectPermissionForm(BootstrapMixin, forms.ModelForm):
|
class ObjectPermissionForm(BootstrapMixin, forms.ModelForm):
|
||||||
actions = SimpleArrayField(
|
actions = SimpleArrayField(
|
||||||
|
label=_('Actions'),
|
||||||
base_field=forms.CharField(),
|
base_field=forms.CharField(),
|
||||||
required=False,
|
required=False,
|
||||||
)
|
)
|
||||||
users = DynamicModelMultipleChoiceField(
|
users = DynamicModelMultipleChoiceField(
|
||||||
|
label=_('Users'),
|
||||||
required=False,
|
required=False,
|
||||||
queryset=get_user_model().objects.all()
|
queryset=get_user_model().objects.all()
|
||||||
)
|
)
|
||||||
groups = DynamicModelMultipleChoiceField(
|
groups = DynamicModelMultipleChoiceField(
|
||||||
|
label=_('Groups'),
|
||||||
required=False,
|
required=False,
|
||||||
queryset=Group.objects.all()
|
queryset=Group.objects.all()
|
||||||
)
|
)
|
||||||
object_types = forms.ModelMultipleChoiceField(
|
object_types = ContentTypeMultipleChoiceField(
|
||||||
|
label=_('Object types'),
|
||||||
queryset=ContentType.objects.all(),
|
queryset=ContentType.objects.all(),
|
||||||
limit_choices_to=OBJECTPERMISSION_OBJECT_TYPES,
|
limit_choices_to=OBJECTPERMISSION_OBJECT_TYPES,
|
||||||
widget=forms.SelectMultiple(attrs={'size': 6})
|
widget=forms.SelectMultiple(attrs={'size': 6})
|
||||||
@ -302,10 +313,10 @@ class ObjectPermissionForm(BootstrapMixin, forms.ModelForm):
|
|||||||
|
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
(None, ('name', 'description', 'enabled',)),
|
(None, ('name', 'description', 'enabled',)),
|
||||||
('Actions', ('can_view', 'can_add', 'can_change', 'can_delete', 'actions')),
|
(_('Actions'), ('can_view', 'can_add', 'can_change', 'can_delete', 'actions')),
|
||||||
('Objects', ('object_types', )),
|
(_('Objects'), ('object_types', )),
|
||||||
('Assignment', ('groups', 'users')),
|
(_('Assignment'), ('groups', 'users')),
|
||||||
('Constraints', ('constraints',))
|
(_('Constraints'), ('constraints',))
|
||||||
)
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
@ -355,7 +366,7 @@ class ObjectPermissionForm(BootstrapMixin, forms.ModelForm):
|
|||||||
|
|
||||||
# At least one action must be specified
|
# At least one action must be specified
|
||||||
if not self.cleaned_data['actions']:
|
if not self.cleaned_data['actions']:
|
||||||
raise forms.ValidationError("At least one action must be selected.")
|
raise forms.ValidationError(_("At least one action must be selected."))
|
||||||
|
|
||||||
# Validate the specified model constraints by attempting to execute a query. We don't care whether the query
|
# Validate the specified model constraints by attempting to execute a query. We don't care whether the query
|
||||||
# returns anything; we just want to make sure the specified constraints are valid.
|
# returns anything; we just want to make sure the specified constraints are valid.
|
||||||
@ -372,5 +383,5 @@ class ObjectPermissionForm(BootstrapMixin, forms.ModelForm):
|
|||||||
model.objects.filter(qs_filter_from_constraints(constraints, tokens)).exists()
|
model.objects.filter(qs_filter_from_constraints(constraints, tokens)).exists()
|
||||||
except FieldError as e:
|
except FieldError as e:
|
||||||
raise forms.ValidationError({
|
raise forms.ValidationError({
|
||||||
'constraints': f'Invalid filter for {model}: {e}'
|
'constraints': _('Invalid filter for {model}: {e}').format(model=model, e=e)
|
||||||
})
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user