Django2.0新特性之a(chǎn)utocomplete_fields

上篇文章說到了autocomplete light結(jié)合xadmin時可能遇到的一個bug,那么為什么需要在admin或者xadmin后臺增加autocomplete light呢?一定要用嗎?

Django2.0中新增了幾個feature,大家比較關(guān)注的可能是以下幾個:

url配置更加人性化,簡單的規(guī)則不需要正則了,比如path('articles//', views.year_archive)。

admin后臺新增響應(yīng)式設(shè)計,可以在移動端管理后臺了。

新增Window表達(dá)式來支持queryset的OVER條件。(參考鏈接1,2。后面考慮寫一篇文章)

這三個也是django文檔上提到的主要特性。

今天這里說另外一個小的特性,但是對于后臺開發(fā)很有用。那就是autocomplete fields[參考鏈接3]。

默認(rèn)外鍵展示的坑

拿新聞網(wǎng)站舉例,一篇文章肯定是屬于某個頻道的,這是一個外鍵。那么我在后臺新增文章時,肯定需要選擇歸屬于那個頻道。djangoadmin和xadmin的做法都是把外鍵數(shù)據(jù)全部加載出來,渲染到select表中。

當(dāng)外鍵的數(shù)據(jù)量小的時候,這不是個問題,但是如果你的頻道有上千個呢?再多點呢?你可以想象下要等待多久才能拿到數(shù)據(jù),然后渲染完頁面。

因此我們一般使用autocomplete light來解決這個問題,解決問題的思路其實很簡單(視頻里講的很清楚),就是監(jiān)聽input的change,然后發(fā)送數(shù)據(jù)到后端某個接口,接口根據(jù)輸入關(guān)鍵字來過濾數(shù)據(jù)(類似Model.objects.filter(name__contains=keywords)),最后返回結(jié)果。前端展示。

不過每次都需要配置autocomplete light是有點繁瑣,上篇文章中也提到一個概念自治?,如果Django本身就能解決這個問題,那肯定是極好的。

admin的autocomplete_fields

在Django的2.0版本中,提供了這樣的功能,可以在admin配置中,定義autocomplete_fields = ['外鍵字段']來解決上面說到的問題。(前端庫依然是select2.js)

不過單純的配置autcomplete_fields是不行的,后端得提供個接口才行。因此這個外鍵字段必須配置了admin才行(并且設(shè)置了search_fields配置)。像是這樣:

實現(xiàn)

Django本身的實現(xiàn)很簡單,比起我們增加外部庫的配置,Django自己直接在admin代碼中增加了autocomplete_view以及對應(yīng)的url,來支持這個邏輯。

具體源碼可以參考:?https://github.com/django/django/blob/master/django/contrib/admin/options.py#L582

參考

MariaDB · 新特性 · 窗口函數(shù)

http://agiliq.com/blog/2017/12/django-20-window-expressions-tutorial/

https://docs.djangoproject.com/en/2.0/releases/2.0/#django-contrib-admin

- from the5fire.com?

文章轉(zhuǎn)自:https://www.the5fire.com/


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容