在使用Django Admin後臺時,有時候想自定義某一字段的Choice_field,例如屏蔽某些選項,只顯示某些指定的選項。python
想象這樣的應用場景,我有一個網站,導航欄是這樣的:django
點開「技術雜談」後,顯示成這樣:函數
在這裏,我在後臺設計model時,將「技術雜談」這種顯示在導航欄的分類定義成一級分類,將「C/C++」、「Python」這種隱藏在摺疊欄中的分類定義成二級分類,二級分類有一個字段存儲有連接到對應的父分類的id號。網站
但這裏出現了一個問題,我在後臺建立文章時分類選項卡中顯示成了這樣:spa
一級分類和二級分類混雜到了一塊兒,而我實際上只但願它顯示二級分類。由於當選擇「C/C++」、「python」這些二級分類時,會自動歸類到對應的一級分類之中,因此不必在選項卡里顯示一級分類。設計
……3d
那麼問題來了,如何在文章的分類選項卡中屏蔽掉一級分類呢?code
咱們須要修改文章的Model類,使用 ForeignKey.
limit_choices_to
限制分類顯示的內容,只顯示符合條件的選項。
blog
舉個簡單的例子,首先建立一個文章類:文檔
class Article(models.Model): title = models.CharField(max_length=50,verbose_name='文章標題') content = models.TextField(verbose_name='文章內容') category = models.ForeignKey(Category,blank=True,null=True,verbose_name='分類')
能夠看出,category字段導入了外鍵Category。咱們在ForeignKey函數中設置limit_choices_to參數:
class Article(models.Model): title = models.CharField(max_length=50,verbose_name='文章標題') content = models.TextField(verbose_name='文章內容') category = models.ForeignKey(Category,blank=True,null=True,verbose_name='分類',limit_choices_to={'level':2})
limit_choices_to={'level':2}的意思是只顯示分類等級爲2的條目,即只顯示二級分類。'level'是我在Category中定義的字段,用來表明該分類的等級,通常只有一級和二級。
總的來講,limit_choices_to的做用是設置篩選條件,在admin中只顯示篩選後的內容。
設置好這個參數,Django在後臺就知道你要選擇顯示的內容了。
如此,在後臺建立文章時就會發現分類表單中只有兩個選項。
你也能夠根據你的須要,顯示你想要顯示的選項。固然對其它字段自定義Choice_field也是同樣的道理。
ps:一開始使用了choices參數設置顯示內容,賦給它一個存儲顯示內容的元組,可是元組內容一直提示錯誤,遂查了很多資料,終於在官方文檔裏找到外鍵中limit_choices_to的使用方法。
附上ForeignKey.
limit_choices_to
官方文檔
連接:ForeignKey.
limit_choices_to
發現Django的中文資料很少呀,官方文檔卻是寫得很詳盡,可是英文文檔找起東西來實在費勁。在這裏記錄下這個問題,以避免後人再走彎路。