专栏名称: Python程序员杂谈
关注PythonWeb开发及相关领域的方方面面,分享在实际工作中遇到的问题及解决方案。关注the5fire,了解Python开发的点点滴滴。
目录
相关文章推荐
德州晚报  ·  德州解除暴雪蓝色预警! ·  昨天  
发现新西兰  ·  这些人后悔在新西兰买房,“租房更便宜!” ·  4 天前  
德州晚报  ·  山东2地纪委监委通报,2人被查! ·  2 天前  
鲁中晨报  ·  刚刚!女演员龙某某已找到 ·  3 天前  
51好读  ›  专栏  ›  Python程序员杂谈

Django2.0新特性之autocomplete_fields

Python程序员杂谈  · 公众号  ·  · 2018-01-22 08:56

正文

上篇文章说到了autocomplete light结合xadmin时可能遇到的一个bug,那么为什么需要在admin或者xadmin后台增加autocomplete light呢?一定要用吗?

Django2.0中新增了几个feature,大家比较关注的可能是以下几个:

  • url配置更加人性化,简单的规则不需要正则了,比如 path('articles/ /', views.year_archive)

  • admin后台新增响应式设计,可以在移动端管理后台了。

  • 新增 Window 表达式来支持queryset的 OVER 条件。(参考链接1,2。后面考虑写一篇文章)

这三个也是django文档上提到的主要特性。

今天这里说另外一个小的特性,但是对于后台开发很有用。那就是autocomplete fields[参考链接3]。

默认外键展示的坑

拿新闻网站举例,一篇文章肯定是属于某个频道的,这是一个外键。那么我在后台新增文章时,肯定需要选择归属于那个频道。djangoadmin和xadmin的做法都是把外键数据全部加载出来,渲染到select表中。

当外键的数据量小的时候,这不是个问题,但是如果你的频道有上千个呢?再多点呢?你可以想象下要等待多久才能拿到数据,然后渲染完页面。

因此我们一般使用autocomplete light来解决这个问题,解决问题的思路其实很简单(视频里讲的很清楚),就是监听input的change,然后发送数据到后端某个接口,接口根据输入关键字来过滤数据(类似 Model.objects.filter(name__contains=keywords) ),最后返回结果。前端展示。

不过每次都需要配置autocomplete light是有点繁琐,上篇文章中也提到一个概念 自治 ,如果Django本身就能解决这个问题,那肯定是极好的。

admin的autocomplete_fields

在Django的2.0版本中,提供了这样的功能,可以在admin配置中,定义 autocomplete_fields = ['外键字段'] 来解决上面说到的问题。(前端库依然是select2.js)

不过单纯的配置 autcomplete_fields 是不行的,后端得提供个接口才行。因此这个 外键字段 必须配置了admin才行(并且设置了 search_fields 配置)。像是这样:

  1. @admin.register(Post)

  2. class PostAdmin(admin.ModelAdmin):

  3.    autocomplete_fields = ['category']

  4. @admin.register(Category)

  5. class Category(







请到「今天看啥」查看全文