mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Circuits Select2 forms
This commit is contained in:
@ -1,5 +1,4 @@
|
|||||||
from django import forms
|
from django import forms
|
||||||
from django.db.models import Count
|
|
||||||
from taggit.forms import TagField
|
from taggit.forms import TagField
|
||||||
|
|
||||||
from dcim.models import Site
|
from dcim.models import Site
|
||||||
@ -7,8 +6,8 @@ from extras.forms import AddRemoveTagsForm, CustomFieldForm, CustomFieldBulkEdit
|
|||||||
from tenancy.forms import TenancyForm
|
from tenancy.forms import TenancyForm
|
||||||
from tenancy.models import Tenant
|
from tenancy.models import Tenant
|
||||||
from utilities.forms import (
|
from utilities.forms import (
|
||||||
AnnotatedMultipleChoiceField, add_blank_choice, BootstrapMixin, CommentField, CSVChoiceField, FilterChoiceField,
|
APISelect, APISelectMultiple, add_blank_choice, BootstrapMixin, CommentField, CSVChoiceField,
|
||||||
SmallTextarea, SlugField,
|
FilterChoiceField, SmallTextarea, SlugField, StaticSelect2, StaticSelect2Multiple
|
||||||
)
|
)
|
||||||
from .constants import CIRCUIT_STATUS_CHOICES
|
from .constants import CIRCUIT_STATUS_CHOICES
|
||||||
from .models import Circuit, CircuitTermination, CircuitType, Provider
|
from .models import Circuit, CircuitTermination, CircuitType, Provider
|
||||||
@ -107,7 +106,11 @@ class ProviderFilterForm(BootstrapMixin, CustomFieldFilterForm):
|
|||||||
)
|
)
|
||||||
site = FilterChoiceField(
|
site = FilterChoiceField(
|
||||||
queryset=Site.objects.all(),
|
queryset=Site.objects.all(),
|
||||||
to_field_name='slug'
|
to_field_name='slug',
|
||||||
|
widget=APISelect(
|
||||||
|
api_url="/api/dcim/sites/",
|
||||||
|
value_field="slug",
|
||||||
|
)
|
||||||
)
|
)
|
||||||
asn = forms.IntegerField(
|
asn = forms.IntegerField(
|
||||||
required=False,
|
required=False,
|
||||||
@ -161,6 +164,16 @@ class CircuitForm(BootstrapMixin, TenancyForm, CustomFieldForm):
|
|||||||
'install_date': "Format: YYYY-MM-DD",
|
'install_date': "Format: YYYY-MM-DD",
|
||||||
'commit_rate': "Committed rate",
|
'commit_rate': "Committed rate",
|
||||||
}
|
}
|
||||||
|
widgets = {
|
||||||
|
'provider': APISelect(
|
||||||
|
api_url="/api/circuits/providers/"
|
||||||
|
),
|
||||||
|
'type': APISelect(
|
||||||
|
api_url="/api/circuits/circuit-types/"
|
||||||
|
),
|
||||||
|
'status': StaticSelect2(),
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class CircuitCSVForm(forms.ModelForm):
|
class CircuitCSVForm(forms.ModelForm):
|
||||||
@ -209,20 +222,30 @@ class CircuitBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldBulkEdit
|
|||||||
)
|
)
|
||||||
type = forms.ModelChoiceField(
|
type = forms.ModelChoiceField(
|
||||||
queryset=CircuitType.objects.all(),
|
queryset=CircuitType.objects.all(),
|
||||||
required=False
|
required=False,
|
||||||
|
widget=APISelect(
|
||||||
|
api_url="/api/circuits/circuit-types/"
|
||||||
|
)
|
||||||
)
|
)
|
||||||
provider = forms.ModelChoiceField(
|
provider = forms.ModelChoiceField(
|
||||||
queryset=Provider.objects.all(),
|
queryset=Provider.objects.all(),
|
||||||
required=False
|
required=False,
|
||||||
|
widget=APISelect(
|
||||||
|
api_url="/api/circuits/providers/"
|
||||||
|
)
|
||||||
)
|
)
|
||||||
status = forms.ChoiceField(
|
status = forms.ChoiceField(
|
||||||
choices=add_blank_choice(CIRCUIT_STATUS_CHOICES),
|
choices=add_blank_choice(CIRCUIT_STATUS_CHOICES),
|
||||||
required=False,
|
required=False,
|
||||||
initial=''
|
initial='',
|
||||||
|
widget=StaticSelect2()
|
||||||
)
|
)
|
||||||
tenant = forms.ModelChoiceField(
|
tenant = forms.ModelChoiceField(
|
||||||
queryset=Tenant.objects.all(),
|
queryset=Tenant.objects.all(),
|
||||||
required=False
|
required=False,
|
||||||
|
widget=APISelect(
|
||||||
|
api_url="/api/tenancy/tenants/"
|
||||||
|
)
|
||||||
)
|
)
|
||||||
commit_rate = forms.IntegerField(
|
commit_rate = forms.IntegerField(
|
||||||
required=False,
|
required=False,
|
||||||
@ -249,35 +272,45 @@ class CircuitFilterForm(BootstrapMixin, CustomFieldFilterForm):
|
|||||||
label='Search'
|
label='Search'
|
||||||
)
|
)
|
||||||
type = FilterChoiceField(
|
type = FilterChoiceField(
|
||||||
queryset=CircuitType.objects.annotate(
|
queryset=CircuitType.objects.all(),
|
||||||
filter_count=Count('circuits')
|
to_field_name='slug',
|
||||||
),
|
widget=APISelectMultiple(
|
||||||
to_field_name='slug'
|
api_url="/api/circuits/circuit-types/",
|
||||||
|
value_field="slug",
|
||||||
|
)
|
||||||
)
|
)
|
||||||
provider = FilterChoiceField(
|
provider = FilterChoiceField(
|
||||||
queryset=Provider.objects.annotate(
|
queryset=Provider.objects.all(),
|
||||||
filter_count=Count('circuits')
|
to_field_name='slug',
|
||||||
),
|
widget=APISelectMultiple(
|
||||||
to_field_name='slug'
|
api_url="/api/circuits/providers/",
|
||||||
|
value_field="slug",
|
||||||
|
)
|
||||||
)
|
)
|
||||||
status = AnnotatedMultipleChoiceField(
|
status = forms.MultipleChoiceField(
|
||||||
choices=CIRCUIT_STATUS_CHOICES,
|
choices=CIRCUIT_STATUS_CHOICES,
|
||||||
annotate=Circuit.objects.all(),
|
annotate=Circuit.objects.all(),
|
||||||
annotate_field='status',
|
annotate_field='status',
|
||||||
required=False
|
required=False,
|
||||||
|
widget=StaticSelect2Multiple()
|
||||||
)
|
)
|
||||||
tenant = FilterChoiceField(
|
tenant = FilterChoiceField(
|
||||||
queryset=Tenant.objects.annotate(
|
queryset=Tenant.objects.all(),
|
||||||
filter_count=Count('circuits')
|
|
||||||
),
|
|
||||||
to_field_name='slug',
|
to_field_name='slug',
|
||||||
null_label='-- None --'
|
null_label='-- None --',
|
||||||
|
widget=APISelectMultiple(
|
||||||
|
api_url="/api/tenancy/tenants/",
|
||||||
|
value_field="slug",
|
||||||
|
null_option=True,
|
||||||
|
)
|
||||||
)
|
)
|
||||||
site = FilterChoiceField(
|
site = FilterChoiceField(
|
||||||
queryset=Site.objects.annotate(
|
queryset=Site.objects.all(),
|
||||||
filter_count=Count('circuit_terminations')
|
to_field_name='slug',
|
||||||
),
|
widget=APISelectMultiple(
|
||||||
to_field_name='slug'
|
api_url="/api/dcim/sites/",
|
||||||
|
value_field="slug",
|
||||||
|
)
|
||||||
)
|
)
|
||||||
commit_rate = forms.IntegerField(
|
commit_rate = forms.IntegerField(
|
||||||
required=False,
|
required=False,
|
||||||
@ -304,4 +337,7 @@ class CircuitTerminationForm(BootstrapMixin, forms.ModelForm):
|
|||||||
}
|
}
|
||||||
widgets = {
|
widgets = {
|
||||||
'term_side': forms.HiddenInput(),
|
'term_side': forms.HiddenInput(),
|
||||||
|
'site': APISelect(
|
||||||
|
api_url="/api/dcim/sites/"
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
@ -20,32 +20,3 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block javascript %}
|
|
||||||
<script type="text/javascript">
|
|
||||||
$(document).ready(function() {
|
|
||||||
|
|
||||||
var cluster_group_list = $('#id_cluster_group');
|
|
||||||
var cluster_list = $('#id_cluster_id');
|
|
||||||
|
|
||||||
// Update cluster options based on selected group
|
|
||||||
cluster_group_list.change(function() {
|
|
||||||
var selected_groups = $(this).val();
|
|
||||||
if (selected_groups) {
|
|
||||||
cluster_list.empty();
|
|
||||||
$.ajax({
|
|
||||||
url: netbox_api_path + 'virtualization/clusters/?limit=500&group=' + selected_groups.join('&group='),
|
|
||||||
dataType: 'json',
|
|
||||||
success: function (response, status) {
|
|
||||||
$.each(response["results"], function (index, cluster) {
|
|
||||||
var option = $("<option></option>").attr("value", cluster.id).text(cluster.name);
|
|
||||||
cluster_list.append(option);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
{% endblock %}
|
|
||||||
|
Reference in New Issue
Block a user