2016-07-26 68 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