Django2.0新特性之autocomplete_fields

栏目: Python · 发布时间: 8年前

内容简介:Django2.0新特性之autocomplete_fields

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

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

  • url配置更加人性化,简单的规则不需要正则了,比如 path('articles/<int:year>/', 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 配置)。像是这样:

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    autocomplete_fields = ['category']


@admin.register(Category)
class Category(admin.ModelAdmin):
    search_fields = ('title', 'id')

实现

Django本身的实现很简单,比起我们增加外部库的配置,Django自己直接在admin代码中增加了 autocomplete_view 以及对应的url,来支持这个逻辑。

具体源码可以参考: https://github.com/django/django/blob/master/django/contrib/admin/options.py#L582

参考

----EOF-----

微信公众号:码农悟凡

Django2.0新特性之autocomplete_fields

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计算机算法

计算机算法

霍罗威茨 / 机械工业 / 2006-1 / 55.00元

本书是计算机算法在设计与分析方面的一本经典著作。书中介绍了算法和算法性能的基本知识,基本的数据结构知识,重点讨论了不同的算法设计策略,研究了下界理论等,提供了计算机算法的设计技术和有效的算法分析,以及大量的详细实例和实际应用。同时,对NP难和NP完全问题能否有效求解进行了分析。本书还汇聚了各种随机算法与并行算法的充分比较。   本书为读者提供了当前流行的对象设计语言C++的实现版本,适合作为......一起来看看 《计算机算法》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码