mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-24 17:38:37 -06:00
Add datetime widgets
This commit is contained in:
parent
aa4588f9ba
commit
7399aa0c5e
@ -7,7 +7,7 @@ from tenancy.forms import TenancyFilterForm, TenancyForm
|
|||||||
from tenancy.models import Tenant
|
from tenancy.models import Tenant
|
||||||
from utilities.forms import (
|
from utilities.forms import (
|
||||||
APISelect, APISelectMultiple, add_blank_choice, BootstrapMixin, CommentField, CSVChoiceField,
|
APISelect, APISelectMultiple, add_blank_choice, BootstrapMixin, CommentField, CSVChoiceField,
|
||||||
FilterChoiceField, SmallTextarea, SlugField, StaticSelect2, StaticSelect2Multiple
|
DatePicker, FilterChoiceField, SmallTextarea, SlugField, StaticSelect2, StaticSelect2Multiple
|
||||||
)
|
)
|
||||||
from .constants import *
|
from .constants import *
|
||||||
from .models import Circuit, CircuitTermination, CircuitType, Provider
|
from .models import Circuit, CircuitTermination, CircuitType, Provider
|
||||||
@ -161,7 +161,6 @@ class CircuitForm(BootstrapMixin, TenancyForm, CustomFieldForm):
|
|||||||
]
|
]
|
||||||
help_texts = {
|
help_texts = {
|
||||||
'cid': "Unique circuit ID",
|
'cid': "Unique circuit ID",
|
||||||
'install_date': "Format: YYYY-MM-DD",
|
|
||||||
'commit_rate': "Committed rate",
|
'commit_rate': "Committed rate",
|
||||||
}
|
}
|
||||||
widgets = {
|
widgets = {
|
||||||
@ -172,7 +171,7 @@ class CircuitForm(BootstrapMixin, TenancyForm, CustomFieldForm):
|
|||||||
api_url="/api/circuits/circuit-types/"
|
api_url="/api/circuits/circuit-types/"
|
||||||
),
|
),
|
||||||
'status': StaticSelect2(),
|
'status': StaticSelect2(),
|
||||||
|
'install_date': DatePicker(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,8 +10,8 @@ from dcim.models import DeviceRole, Platform, Region, Site
|
|||||||
from tenancy.models import Tenant, TenantGroup
|
from tenancy.models import Tenant, TenantGroup
|
||||||
from utilities.forms import (
|
from utilities.forms import (
|
||||||
add_blank_choice, APISelectMultiple, BootstrapMixin, BulkEditForm, BulkEditNullBooleanSelect, ColorSelect,
|
add_blank_choice, APISelectMultiple, BootstrapMixin, BulkEditForm, BulkEditNullBooleanSelect, ColorSelect,
|
||||||
CommentField, ContentTypeSelect, FilterChoiceField, LaxURLField, JSONField, SlugField, StaticSelect2,
|
CommentField, ContentTypeSelect, DatePicker, DateTimePicker, FilterChoiceField, LaxURLField, JSONField,
|
||||||
BOOLEAN_WITH_BLANK_CHOICES,
|
SlugField, StaticSelect2, BOOLEAN_WITH_BLANK_CHOICES,
|
||||||
)
|
)
|
||||||
from .constants import *
|
from .constants import *
|
||||||
from .models import ConfigContext, CustomField, CustomFieldValue, ImageAttachment, ObjectChange, Tag
|
from .models import ConfigContext, CustomField, CustomFieldValue, ImageAttachment, ObjectChange, Tag
|
||||||
@ -57,7 +57,7 @@ def get_custom_fields_for_model(content_type, filterable_only=False, bulk_edit=F
|
|||||||
|
|
||||||
# Date
|
# Date
|
||||||
elif cf.type == CF_TYPE_DATE:
|
elif cf.type == CF_TYPE_DATE:
|
||||||
field = forms.DateField(required=cf.required, initial=initial, help_text="Date format: YYYY-MM-DD")
|
field = forms.DateField(required=cf.required, initial=initial, widget=DatePicker())
|
||||||
|
|
||||||
# Select
|
# Select
|
||||||
elif cf.type == CF_TYPE_SELECT:
|
elif cf.type == CF_TYPE_SELECT:
|
||||||
@ -388,16 +388,12 @@ class ObjectChangeFilterForm(BootstrapMixin, forms.Form):
|
|||||||
time_after = forms.DateTimeField(
|
time_after = forms.DateTimeField(
|
||||||
label='After',
|
label='After',
|
||||||
required=False,
|
required=False,
|
||||||
widget=forms.TextInput(
|
widget=DateTimePicker()
|
||||||
attrs={'placeholder': 'YYYY-MM-DD hh:mm:ss'}
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
time_before = forms.DateTimeField(
|
time_before = forms.DateTimeField(
|
||||||
label='Before',
|
label='Before',
|
||||||
required=False,
|
required=False,
|
||||||
widget=forms.TextInput(
|
widget=DateTimePicker()
|
||||||
attrs={'placeholder': 'YYYY-MM-DD hh:mm:ss'}
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
action = forms.ChoiceField(
|
action = forms.ChoiceField(
|
||||||
choices=add_blank_choice(OBJECTCHANGE_ACTION_CHOICES),
|
choices=add_blank_choice(OBJECTCHANGE_ACTION_CHOICES),
|
||||||
|
@ -9,8 +9,8 @@ from tenancy.forms import TenancyFilterForm, TenancyForm
|
|||||||
from tenancy.models import Tenant
|
from tenancy.models import Tenant
|
||||||
from utilities.forms import (
|
from utilities.forms import (
|
||||||
add_blank_choice, APISelect, APISelectMultiple, BootstrapMixin, BulkEditNullBooleanSelect, ChainedModelChoiceField,
|
add_blank_choice, APISelect, APISelectMultiple, BootstrapMixin, BulkEditNullBooleanSelect, ChainedModelChoiceField,
|
||||||
CSVChoiceField, ExpandableIPAddressField, FilterChoiceField, FlexibleModelChoiceField, ReturnURLForm, SlugField,
|
CSVChoiceField, DatePicker, ExpandableIPAddressField, FilterChoiceField, FlexibleModelChoiceField, ReturnURLForm,
|
||||||
StaticSelect2, StaticSelect2Multiple, BOOLEAN_WITH_BLANK_CHOICES
|
SlugField, StaticSelect2, StaticSelect2Multiple, BOOLEAN_WITH_BLANK_CHOICES
|
||||||
)
|
)
|
||||||
from virtualization.models import VirtualMachine
|
from virtualization.models import VirtualMachine
|
||||||
from .constants import *
|
from .constants import *
|
||||||
@ -156,12 +156,12 @@ class AggregateForm(BootstrapMixin, CustomFieldForm):
|
|||||||
help_texts = {
|
help_texts = {
|
||||||
'prefix': "IPv4 or IPv6 network",
|
'prefix': "IPv4 or IPv6 network",
|
||||||
'rir': "Regional Internet Registry responsible for this prefix",
|
'rir': "Regional Internet Registry responsible for this prefix",
|
||||||
'date_added': "Format: YYYY-MM-DD",
|
|
||||||
}
|
}
|
||||||
widgets = {
|
widgets = {
|
||||||
'rir': APISelect(
|
'rir': APISelect(
|
||||||
api_url="/api/ipam/rirs/"
|
api_url="/api/ipam/rirs/"
|
||||||
)
|
),
|
||||||
|
'date_added': DatePicker(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -205,6 +205,9 @@ class AggregateBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldBulkEd
|
|||||||
nullable_fields = [
|
nullable_fields = [
|
||||||
'date_added', 'description',
|
'date_added', 'description',
|
||||||
]
|
]
|
||||||
|
widgets = {
|
||||||
|
'date_added': DatePicker(),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class AggregateFilterForm(BootstrapMixin, CustomFieldFilterForm):
|
class AggregateFilterForm(BootstrapMixin, CustomFieldFilterForm):
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from django import forms
|
from django import forms
|
||||||
from django.contrib.auth.forms import AuthenticationForm, PasswordChangeForm as DjangoPasswordChangeForm
|
from django.contrib.auth.forms import AuthenticationForm, PasswordChangeForm as DjangoPasswordChangeForm
|
||||||
|
|
||||||
from utilities.forms import BootstrapMixin
|
from utilities.forms import BootstrapMixin, DateTimePicker
|
||||||
from .models import Token
|
from .models import Token
|
||||||
|
|
||||||
|
|
||||||
@ -29,6 +29,6 @@ class TokenForm(BootstrapMixin, forms.ModelForm):
|
|||||||
fields = [
|
fields = [
|
||||||
'key', 'write_enabled', 'expires', 'description',
|
'key', 'write_enabled', 'expires', 'description',
|
||||||
]
|
]
|
||||||
help_texts = {
|
widgets = {
|
||||||
'expires': 'YYYY-MM-DD [HH:MM:SS]'
|
'expires': DateTimePicker(),
|
||||||
}
|
}
|
||||||
|
@ -362,6 +362,36 @@ class APISelectMultiple(APISelect, forms.SelectMultiple):
|
|||||||
self.attrs['data-multiple'] = 1
|
self.attrs['data-multiple'] = 1
|
||||||
|
|
||||||
|
|
||||||
|
class DatePicker(forms.TextInput):
|
||||||
|
"""
|
||||||
|
Date picker using Flatpickr.
|
||||||
|
"""
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
self.attrs['class'] = 'date-picker'
|
||||||
|
self.attrs['placeholder'] = 'YYYY-MM-DD'
|
||||||
|
|
||||||
|
|
||||||
|
class DateTimePicker(forms.TextInput):
|
||||||
|
"""
|
||||||
|
DateTime picker using Flatpickr.
|
||||||
|
"""
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
self.attrs['class'] = 'datetime-picker'
|
||||||
|
self.attrs['placeholder'] = 'YYYY-MM-DD hh:mm:ss'
|
||||||
|
|
||||||
|
|
||||||
|
class TimePicker(forms.TextInput):
|
||||||
|
"""
|
||||||
|
Time picker using Flatpickr.
|
||||||
|
"""
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
self.attrs['class'] = 'time-picker'
|
||||||
|
self.attrs['placeholder'] = 'hh:mm:ss'
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Form fields
|
# Form fields
|
||||||
#
|
#
|
||||||
|
Loading…
Reference in New Issue
Block a user