内容简介: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—高级特性
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Effective java 中文版(第2版)
Joshua Bloch / 俞黎敏 / 机械工业出版社 / 2009-1-1 / 52.00元
本书介绍了在Java编程中78条极具实用价值的经验规则,这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案。通过对Java平台设计专家所使用的技术的全面描述,揭示了应该做什么,不应该做什么才能产生清晰、健壮和高效的代码。 本书中的每条规则都以简短、独立的小文章形式出现,并通过例子代码加以进一步说明。本书内容全面,结构清晰,讲解详细。可作为技术人员的参考用书。一起来看看 《Effective java 中文版(第2版)》 这本书的介绍吧!