Python 如何创建下拉依赖项
我有一个从数据库中提取不同值的下拉列表。根据此下拉列表中选择的值,我希望第二个下拉列表使用同一表中的其他不同值进行更新。例如,假设我有一个包含“大陆”和“国家”字段的表,如果我选择“欧洲”,我希望第二个下拉列表显示数据库中属于该大陆的国家 我设法创建了第一个下拉列表并将其连接到数据库,但我正在努力完成第二步,即检索第一个下拉列表的选择并使用它更新第二个下拉列表 以下是我的视图.py:Python 如何创建下拉依赖项,python,html,django,dropdown,Python,Html,Django,Dropdown,我有一个从数据库中提取不同值的下拉列表。根据此下拉列表中选择的值,我希望第二个下拉列表使用同一表中的其他不同值进行更新。例如,假设我有一个包含“大陆”和“国家”字段的表,如果我选择“欧洲”,我希望第二个下拉列表显示数据库中属于该大陆的国家 我设法创建了第一个下拉列表并将其连接到数据库,但我正在努力完成第二步,即检索第一个下拉列表的选择并使用它更新第二个下拉列表 以下是我的视图.py: def MyView(request): query_results = data_world.obj
def MyView(request):
query_results = data_world.objects.all()
continents_list = ContinentsChoiceField()
countries_list = CountriesChoiceField()
query_results_dict = {
'query_results': query_results,
'continents_list': continents_list ,
'countries_list': countries_list ,
}
return render(request,'home.html', query_results_dict)
models.py:
class data_world(models.Model):
id = models.AutoField(primary_key=True)
continent_name= models.TextField(db_column='CONTINENTS', blank=True, null=True)
country_name = models.TextField(db_column='COUNTRIES', blank=True, null=True)
city_name = models.TextField(db_column='CITIES', blank=True, null=True)
class Meta:
managed = True
db_table = 'world'
forms.py:
class ContinentsChoiceField(forms.Form):
continents = forms.ModelChoiceField(
queryset=data_world.objects.values_list("continent_name", flat=True).distinct(),
empty_label=None
)
class CountriesChoiceField(forms.Form):
countries = forms.ModelChoiceField(
queryset=data_world.objects.values_list("country_name", flat=True).distinct(),
empty_label=None
)
home.html:
<select id="continents">
{% for item in continents_list %}
<option val="{{ item.continent_name }}"> {{ item }} </option>
{% endfor %}
</select>
<script type="text/javascript">
function GetSelectedText(){
var ct = document.getElementById("continents");
var result_ct = ct.options[ct.selectedIndex].text;
document.getElementById("result_ct").innerHTML = result_ct;
}
</script>
<button type="button" onclick="GetSelectedText()">Get Selected Value</button>
<select id="countries">
{% for item in countries_list %}
<option val="{{ item.country_name }}"> {{ item }} </option>
{% endfor %}
</select>
{大陆列表%中项目的百分比}
{{item}}
{%endfor%}
函数GetSelectedText(){
var ct=document.getElementById(“大陆”);
var result\u ct=ct.options[ct.selectedIndex].text;
document.getElementById(“result\u-ct”).innerHTML=result\u-ct;
}
获取选定值
{国家/地区中项目的%u列表%}
{{item}}
{%endfor%}
编辑1:用一些Js代码更新了我的html页面,帮助我检索所选的大陆。现在,我需要使用它在第二个下拉列表中显示相应的国家/地区。django-select2软件包正是这样做的 看看 在models.py中
class Country(models.Model):
name = models.CharField(max_length=255)
class City(models.Model):
name = models.CharField(max_length=255)
country = models.ForeignKey('Country', related_name="cities")
然后定制一个表单:
...
from django_select2.forms import ModelSelect2Widget
class AddressForm(forms.Form):
country = forms.ModelChoiceField(
queryset=Country.objects.all(),
label=u"Country",
widget=ModelSelect2Widget(
model=Country,
search_fields=['name__icontains'],
)
)
city = forms.ModelChoiceField(
queryset=City.objects.all(),
label=u"City",
widget=ModelSelect2Widget(
model=City,
search_fields=['name__icontains'],
dependent_fields={'country': 'country'},
max_results=500,
)
)
您需要A)使用JavaScript识别下拉列表1中的更改并请求第二个项目,或者B)在做出第一个选择后提交页面,并在Django视图中放入一些代码以填充第二个。在S.O.上还有其他关于选择下拉项时如何提交页面的问题。我更喜欢JavaScript选项,但不知道语言。有人能帮忙吗?谢谢