2016-07-26 60 views
0

比方说,我有一些模式是这样的:层次外键选择

class Country(models.Model): 
    name = models.TextField() 

class City(models.Model): 
    country = models.ForeignKey(Country) 
    name = models.TextField() 

class Person(models.Model): 
    city = models.ForeignKey(City) 
    name = models.TextField() 

在Django管理页面,如果我添加/编辑Person例如,它会给我的下拉City情况下从,这样的选择:

enter image description here

然而,城市在世界上的数量是非常大的。所以,我希望做的是有层次的国家 - >城市选择,就像这样:

enter image description here

这可能在Django?

回答

0

你可以做,如果你创建一个自己的页面,默认加载一个国家及其国家,那么如果你选择一个国家做ajax调用重新填充城市,我会建议角js为相同。

+0

我想在Django管理控制台中做到这一点,但不是在我自己的页面上。 – aco

+0

如果这就是你想要的,你肯定需要重写django管理模板 – doubleo46

+0

你的意思是哪个模板?看来你可以覆盖其中的一些:https://docs.djangoproject.com/en/1.9/ref/contrib/admin/#templates-which-may-be-overridden-per-app-or-model – aco

0

这是可能的,但不是开箱即用。

在用户选择国家以获取与该国家相关的城市等之后,您必须进行制作和ajax请求。

您将需要一个django视图,该视图以一种格式返回给定国家的城市,以便于在javascript上解析或构建html并通过网络发送,如果您不关心重用该端点也许你可以检查Django的JsonResponse

之后,你需要使用javascript(这可能是一个好主意,使用类似jQuery的东西)击中发送国家ID和获取相应的城市的视图。

希望这会有所帮助。

+0

虽然我在哪里放置AJAX代码?我假设我需要重写一些Django管理功能,但我不知道从哪里开始。 – aco

+0

你可以尝试使用这样的东西https://github.com/digi604/django-smart-selects并为adminmodel指定一个自定义表单。 – israelord