买辽宁快乐12的技巧:the5fire的技术博客

彩票开奖查询 www.8a72.cn 关注Python、Django、Vim、Linux、Web开发、团队管理和互联网--Life is short, we need Python.


Django2.0新特性之autocomplete_fields

作者:the5fire | 标签:       | 发布:2018-01-22 8:51 a.m. | 阅读量: 3478, 1785

上篇文章说到了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

参考

- from www.8a72.cn
----EOF-----

微信公众号:Python程序员杂谈

预售优惠价截止到7月8日23点59分。


其他分类:
  • 女子谎称刷单提成骗贫困大学生16万 用于买化妆品 2018-12-01
  • 西安体育学院体育传媒系与西部网签约校媒合作 2018-12-01
  • 网络投票刷礼物能不能帮孩子“争上游”? 2018-11-28
  • 中共山西省委组织部公示 2018-11-28
  • 【北京天气】最新北京今天天气,实时提供北京气温、空气质量、24小时天气预报、生活指数查询 2018-11-24
  • 格局生变 内容产业未来何去何从 2018-08-18
  • 土地不是劳动成果,而是一种自然资源,就像空气、阳光不是劳动成果而是自然资源一样,所以土地不具有价值,买房只应支付房屋费,不应该支付土地费。 2018-08-14
  • 安全生产月:铁路安全宣传走进车站 2018-08-02
  • 带动乡亲干 各自有实招——三位农村社区党组织书记的故事 2018-08-02
  • 长江中下游正式“入梅”!中东部高温降雨齐上阵 湖北中北部有大到暴雨 2018-07-31
  • 2018年4月27日划拨国家社科基金项目鉴定费名单(2) 2018-07-31
  • [微笑]未来的社会,必然是按需(基本需求)分配+按劳(劳动价值或劳动能力)分配相联合的混合分配方式。 2018-07-30
  • “一带一路”建设工作座谈会 2018-07-30
  • 只要等一等就能多“等”出8600万美元! 2018-07-29
  • 2017年秋季学期学员第十三支部风采 2018-07-18
  • 167| 685| 696| 165| 328| 327| 582| 728| 804| 961|