1
0
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:
John Anderson
2019-01-10 17:50:06 -05:00
parent 60224be272
commit 5f1f8ee73b
2 changed files with 62 additions and 55 deletions

View File

@ -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/"
)
} }

View File

@ -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 %}