Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何创建下拉依赖项_Python_Html_Django_Dropdown - Fatal编程技术网

Python 如何创建下拉依赖项

Python 如何创建下拉依赖项,python,html,django,dropdown,Python,Html,Django,Dropdown,我有一个从数据库中提取不同值的下拉列表。根据此下拉列表中选择的值,我希望第二个下拉列表使用同一表中的其他不同值进行更新。例如,假设我有一个包含“大陆”和“国家”字段的表,如果我选择“欧洲”,我希望第二个下拉列表显示数据库中属于该大陆的国家 我设法创建了第一个下拉列表并将其连接到数据库,但我正在努力完成第二步,即检索第一个下拉列表的选择并使用它更新第二个下拉列表 以下是我的视图.py: def MyView(request): query_results = data_world.obj

我有一个从数据库中提取不同值的下拉列表。根据此下拉列表中选择的值,我希望第二个下拉列表使用同一表中的其他不同值进行更新。例如,假设我有一个包含“大陆”和“国家”字段的表,如果我选择“欧洲”,我希望第二个下拉列表显示数据库中属于该大陆的国家

我设法创建了第一个下拉列表并将其连接到数据库,但我正在努力完成第二步,即检索第一个下拉列表的选择并使用它更新第二个下拉列表

以下是我的视图.py:

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选项,但不知道语言。有人能帮忙吗?谢谢