0

如何根据所选的“国家”更新“城市”下拉菜单?有什么建立在 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 }}

但是所有城市都会同时显示。

请指教。

4

3 回答 3

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")

从文档:

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

于 2013-01-24T02:55:20.703 回答
2

我的回答会有点长,所以我建议你可以看看这个实现,它准确地回答了你正在寻找的东西。

于 2013-01-23T23:44:06.760 回答
1

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

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

希望这可以帮助!

于 2013-01-24T00:23:59.047 回答