上篇文章说到了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 配置)。像是这样:

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

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

- from the5fire.com

文章转自:https://www.the5fire.com/

class ForeignKey(ForeignObject): def __init__(self, to, on_delete, related_name=None, related_query_name=None, limit_choices_to=None, parent_link=False, to_ field =None, db_constraint=True, **kwargs): super().__init__(to, on_delete, from_ field s=['self'], to_fie 1.在admin中新增一行代码 autocomplete _ field s = (‘filed1’,‘ field 2’) 其中 field 1, field 2字段需要是外键字段 2. field 1, field 2中对应的表中添加一行代码 search_ field s = (‘name’,) name为 field 1或 field 2对应表中要进行搜索的字段 Django 自带的admin管理后台简直是个bug级的存在, 几行代码就可以撸出一个功能齐全的管理后台来。小编我今天就带你看下 Django 自带的admin有哪些高级用法值得掌握。本文建议... Django Admin Page raise 404 when using autocomplete _ field s Django 的管理后台采用 autocomplete _ field s来优化一对多字段代码大致如下 # models.py class Category(BaseModel): title = models.Char Field ("分类名", max_length=32) class Goods(BaseModel): category = models.ForeignKey( 最近在用 django 自带的后台管理站点实现CRM系统的实现,虽然自带的管理页面中,对于foreignkey字段,系统会识别成一个下拉框,如下图所示 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200904103914662.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MT Django 的ORM中存在查询集的概念。 查询集,也称查询结果集、QuerySet,表示从数据库中获取的对象集合。 当调用如下过滤器方法时, Django 会返回查询集(而不是简单的列表): all():返回所有数据。 filter():返回满足条件的数据。 exclude():返回满足条件之外的数据。 order_by():对结果进行排序。 对查询集可以再次调... 什么是自动补全( autocomplete )功能呢?我们举一个很常见的例子。每当你去谷歌并开始打字时,就会出现一个下拉列表,其中列出了建议。这些建议与查询相关并帮助用户完成查询。 Autocomplete 正如所说的: Autocomplete 或单词完成是一个功能,应用程序预测使用的其余单词正在键入它也知道你键入或键入前方搜索。它通过提示用户在键入文本的可能性和替代方案来帮助他们导航或指导用户。它减少用户在执行任何搜索操作之前需要输入的字符数量,从而增强用户的搜索体验。 对admin管理后台里的列表展示页面的数据展示进行相关优化的目的:更加方便我们对列表展示页面里的数据进行操作! 问题:那么,我们如何对admin管理后台里的列表展示页面的数据展示进行相关优化呢? 答案:我们对指定父类里的相关属性值进行重写,就能实现对admin管理后台里的列表展示页面的数据展示进行优化; 具体实现可以看接下来完整的操作流程; ①.操作流程的全程都是拿表animal当测试数据; 二、完整的操作步骤 1、第一步:查看ModelAdmin类和BaseMode. <br />BlackBerry SDK 5.0提供输入过滤,输入自动完成的功能。BasicFilteredList - 创建过滤列表 AutoComplete Field - 创建输入自动完成 Field <br />// 首先创建过滤列表<br />BasicFilteredList filterList = new BasicFilteredList();<br /> <br />// 自动完成内容<br />String[] days = {"Monday","Tuesday","Wednesday", " django - autocomplete -light 使用(二) 当我们在使用 dajngo admin 或者 xadmin 中 foreignKey 字段时, 后台默认提供是 select2 复选框, 加入我们该字段对应的数据量很多时, 会出现加载很慢的情况,出现这种情况是由于后台默认会给我们加载出该字段所有 model 提供我们去选择, 但实际情况我们只需要其中的某个 model 与当... (原创声明或转载信息) 原创声明:本文除了标明引用的内容外,都为本人原创,请尊重本人的知识产权,不能用于商业用途。欢迎转载,转载请在文章开头处插入以下内容: 本文转载自"狂龙ing”的Blog,地址为“http://blog.csdn.net/kuanglong2016/article/details/15816305" 问题: Django Admin使用select来作为Model的外键