Django-从两个下拉菜单中选择选项,并在第三个下拉菜单中显示过滤结果
我有两个下拉选项,国家和号码服务地点。两个选项都可以从各自的下拉列表中选择。 我的目标是根据所选国家/地区和号码服务位置显示正确的电话号码。您还将在下面的视图中看到我尝试使用Ajax实现此功能 在此创建的模型-Django-从两个下拉菜单中选择选项,并在第三个下拉菜单中显示过滤结果,django,ajax,django-models,django-views,django-templates,Django,Ajax,Django Models,Django Views,Django Templates,我有两个下拉选项,国家和号码服务地点。两个选项都可以从各自的下拉列表中选择。 我的目标是根据所选国家/地区和号码服务位置显示正确的电话号码。您还将在下面的视图中看到我尝试使用Ajax实现此功能 在此创建的模型- class DID_Number_Assignment_Model(models.Model): #DID Number Assignment country = models.ForeignKey(Country_Model, on_delete=models.CA
class DID_Number_Assignment_Model(models.Model): #DID Number Assignment
country = models.ForeignKey(Country_Model, on_delete=models.CASCADE)
number_service_location = models.ForeignKey(Number_Service_Location_Model, on_delete=models.CASCADE)
did_selector = models.ForeignKey(DID_Definition_Model, on_delete=models.CASCADE)
Views.py
def did_assignment_form(request, id=0, *args, **kwargs):
if request.method =="POST":
if id==0:
form = DID_Number_Assignment_Model_Form(request.POST)
if request.is_ajax():
country = request.GET.get('country')
number_service_location = request.GET.get('number_service_location')
filters = {'country': country, 'number_service_location': number_service_location}
dids_searched = DID_Definition_Model.objects.filter(**filters)
data = []
for dids in dids_searched:
data.append({
'country': dids.country,
'number_service_location': dids.number_service_location})
return HttpResponse({
'success': True,
'data': data,
}, content_type=content_type)
else:
return HttpResponse({
'success': False,
'message': 'Only AJAX method is allowed.'
}, content_type=content_type)
模板html文件在这里-
<form action="" method="post" autocomplete="off">
{%csrf_token%}
<!--{{form|crispy}} !-->
<div class="row", style = "position:relative; left:57px; top:100px">
<div class="col-md-7"> {{ form.country | as_crispy_field }} </div>
<div class="col-md-7"> {{ form.number_service_location | as_crispy_field }} </div>
<script type="text/javascript">
$(document).on('change', '.filter-dropdown', function() {
var country = $('#countryDropdown').children('option:selected').val();
var number_service_location = $('#number_service_locationDropdown').children('option:selected').val();
if (country !== "" && number_service_location !== "" ) {
var data = {
'country': country,
'number_service_location': number_service_location
}
$.ajax({
url: '/did_definition_list/',
type: 'GET',
data: data,
dataType: 'json',
success: function(response) {
if (response.success) {
// render did_number from `response.data`
} else {
// show message from `response.message`
}
},
error: function(errorResponse) {
// show error message
}
});
} else {
return;
}
});
</script>
class DID_Number_Assignment_Model_Form(forms.ModelForm):
class Meta:
model = DID_Number_Assignment_Model
fields = ('country','number_service_location','did_selector', 'usage_assignment', 'employee_fullname', 'employee_email', 'subscriber_department' )
def __init__(self, *args, **kwargs):
super(DID_Number_Assignment_Model_Form,self).__init__(*args, **kwargs)
defs_with_no_assignments = DID_Definition_Model.objects.filter(did_number_assignment_model__isnull=True)
available_did= defs_with_no_assignments.values_list('did_number', flat=True)
# TO SET drop down default text for a field , optional -
self.fields['did_selector'].empty_label = "Select"
self.fields['did_selector'].queryset = DID_Definition_Model.objects.filter(did_number__in=available_did)