内容简介: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
参考
- MariaDB · 新特性 · 窗口函数
- http://agiliq.com/blog/2017/12/django-20-window-expressions-tutorial/
- https://docs.djangoproject.com/en/2.0/releases/2.0/#django-contrib-admin
----EOF-----
微信公众号:码农悟凡
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 『互联网架构』软件架构-redis特性和集群特性(中)(49)
- 『互联网架构』软件架构-redis特性和集群特性(上)(48)
- 『互联网架构』软件架构-redis特性和集群特性(下)(50)
- JDK 14 功能特性
- C# 特性(Attribute)
- python—高级特性
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Programming Python
Mark Lutz / O'Reilly Media / 2006-8-30 / USD 59.99
Already the industry standard for Python users, "Programming Python" from O'Reilly just got even better. This third edition has been updated to reflect current best practices and the abundance of chan......一起来看看 《Programming Python》 这本书的介绍吧!