如何根据所选的“国家/地区”更新“城市”下拉菜单?

时间:2013-01-23 23:40:19

标签: python django

如何根据所选的“国家/地区”更新“城市”下拉列表?是否有任何基于Django的内容可以促进这一点?

class Country(models.Model):
    name            = models.CharField(max_length=50)
    ...

class City(models.Model):
    name         = models.CharField(max_length=50)
    country      = models.ForeignKey(Country)

class UserProfile(models.Model):
    ...
    country             = models.ForeignKey(Country, default=1)
    city                = models.ForeignKey(City, default=1)
    user                = models.OneToOneField(User)

在我看来,我有:

{{ profile_form.country }}
{{ profile_form.city }}

但所有城市都会立刻出现。

请告知。

3 个答案:

答案 0 :(得分:2)

我的答案会有点长,所以我建议你看一下这个implementation,它可以准确回答你的需求。

答案 1 :(得分:2)

使用django-smart-selects。它包含更新表单字段的js功能,并帮助我节省了大量时间用javascript编写ajax调用。示例项目包括一个类似于上面提到的用例。它可能看起来像这样:

from smart_selects.db_fields import ChainedForeignKey 

class City(models.Model):
    name = models.CharField(max_length=50)
    country = models.ForeignKey(Country)

class UserProfile(models.Model):
    country = models.ForeignKey(Country)
    city = ChainedForeignKey(City, chained_field="country", chained_model_field="country")

来自文档:

  

链式字段是字段应在同一模型上的字段   链式也是。链式模型字段是链式模型的字段   对应于链式字段链接的模型。

答案 2 :(得分:1)

这似乎是您可能希望在客户端的计算机上使用javascript进行的操作。您的网络服务器(运行Django的机器)不知道用户何时在下拉菜单上做出选择,直到他们点击提交。 (这会向您的Web服务器发出HTTP POST请求,并传递该表单的所有参数)。

在javascript中,您可以注册一个函数,以便在“国家/地区”下拉列表更改时,“城市”下拉列表会动态重新填充。

希望这有帮助!