django filter过滤器实现显示某个类型指定字段不同值方式


Posted in Python onJuly 16, 2020

1,前端样式

django filter过滤器实现显示某个类型指定字段不同值方式

2,html代码

{% load asset_filter %}
<div class="col-sm-2">
 <select class="input-sm form-control select2 inline" name="ServiceModel">
 <option value="">模块</option>
 {% for i in 'Ecs'|ecs_model_field_distinct:'ServiceModel' %}
 {% if i.0 %}
 <option value="{{ i.0 }}">{{ i.0 }}</option>
 {% endif %}
 {% endfor %}
 </select>
</div>

3,后端代码

asset_filter.py 内容如下:

@register.filter(name='ecs_model_field_distinct')
def ecs_model_field_distinct(model_name, field_name):
 '''
 获取model_name模块对象的某个属性field_name的distinct值,返回值的数组
 :param model_name:
 :param field_name:
 :return:
 '''
 asset_app = apps.get_app_config('rule')
 return asset_app.get_model(model_name).objects.all().values_list(field_name).distinct()

补充知识:django 模型类的常见字段约束,以及filter 过滤和查询

null

不设置时默认设置为False。设置为True时,数据库表字段中将存入NULL的记录。 null和blank组合使用,null=True,blank=True,表示该字段可以为空

blank

默认设置为False。设置为True时,表字段许可无任何输入。设置为False 时,表字段为必须输入的字段

choices

备选设置。选择列表选项,如果设置后,该字段的表单必然会是下拉选择的。这个值必须是一个有小括号构成的元组,每个元组前一个字段将存入数据库,后一个字段是显示给用户看的。

default

默认值,设置后在用户无输入时,表字段将以这个选项的内容来存储到数据库字段

可以为python 支持的任意数据对象

editable

如何设置为False,将不会参与到表单的验证。默认是设置为True的

error_messages

这个选项实现校验时的错误提示。是字典结构的内容。

help_text

在表单中形成输入提示内容

primary_key

主键,设置为 True ,该字段将启用为主键。 默认是 False

unique

设置为 True 启用不存在重复值输入的设定,默认为False

unique_for_date

设定日期不存在重复输入,默认为False

verbose_name

字段的文本标签

validators

校验选项,用来配置校验的方法,构成的列表。

max_length

最大输入字符串的长度

min_length

最少输入字符串的长度

AutoField 自动增值的id字段

primary_key=True 为必设置选项

BigAutoField 自动增值的id字段

支持 1 到 9223372036854775807,之间的序号

BigIntegerField 长整形字段

从 -9223372036854775808 到9223372036854775807 的整数

BinaryField 二进制字段

存储内存二进制数据,以 python bytes 对象来访问

BooleanField 布尔值字段

如果许可空的布尔值输入,换用 NullBooleadField

CharField可变长字符串字段

max_length 有最大输入选项为必须设置的选项

DateField日期字段

auto_now:每一次保存对象时,Django 都会自动将该字段的值设置为当前时间。一般用来表示 "最后修改" 时间。要注意使用的是当前日期,而并非默认值,所以

不能通过重写默认值的办法来改变保存时间。

auto_now_add:在第一次创建对象时,Django 自动将该字段的值设置为当前时间,一般用来表示对象创建时间。它使用的同样是当前日期,而非默认值

DateTimeField 有时刻的日期字段

auto_now=False

auto_now_add=False

当auto_now或者auto_now_add设置为True时,字段会有editable=True和blank=True的设定

; 固定精度的十进制数的字段。

它有两个必须的参数

max_digits:数字允许的最大位数

decimal_places:小数的最大位数

例如,要存储的数字最大值是999,而带有两个小数位,你可以使用

models.DecimalField(..., max_digits=5, decimal_places=2)

DurationField 日期时间增量型字段,存储着python timedelta 类数据

EmailField 邮件字段

FileField 文件字段

FilePathField 文件路径字段

FloatField 小数字段

ImageField 图片字段

IntegerField 整数字段

GenericIPAddressField ip地址字段

NullBooleanField 许可null的布尔值字段

PositiveIntegerField

0 到 2147483647,支持所有数据库取值范围的安全整数。

PositiveSmallIntegerField

0 到 32767 支持所有数据库取值范围的安全短整数。

SlugField

SmallIntegerField 短整形字段

TextField 备注型字段,用于存储复杂

TimeField 时间字段

URLField 网址字段

UUIDField

Python UUID 数据对象,一个32位长度的ID字符串

映射字段

ForeignKeyField 一对多字段

映射字段

ManyToManyField 多对多字段

映射字段

OneToOneField 一对一字段

表的查询

查询

Person.objects.all().order_by(“-username”) 按照username字段值 反向排序

Person.objects.all()[:10]切片操作,获取10个人,不支持负索引,切片可以节约内存,不支持负切片

Person.objects.get(name=name) get获取不到报异常,不可取

get是用来获取一个对象的,如果需要获取满足条件的一些人,就要用到filter

Person.objects.filter(name="abc")# 等于

Person.objects.filter(name__exact="abc")名称严格等于 "abc" 的人

Person.objects.filter(name__iexact="abc")# 名称为abc 但是不区分大小写,可以找到ABC, Abc, aBC,这些都符合条件

***Person.objects.filter(name__contains="abc")# 名称中包含"abc"的人

***Person.objects.filter(name__icontains="abc")#名称中包含"abc",且abc不区分大小写

Person.objects.filter(name__regex="^abc")# 正则表达式查询

Person.objects.filter(name__iregex="^abc")#正则表达式不区分大小写

****

Person.objects.filter(age__gt=15)# age > 15

Person.objects.filter(age__lt=15)# age < 15

Person.objects.filter(age__gte=15)# age >= 15

Person.objects.filter(age__lte=15)# age <= 15

Person.objects.filter(age__ne=15)# age != 15

数据的归档

times = Person.objects.datas('add_time','month',order='desc') 默认正序,desc 倒序

month 表示精准到月

前端页面

{% for time in times %}

{{ time.year }} 年 {{time.month}} 月 {{time.day}}日 精准到月,这个time.day 永远是 1

{% endfor %}

filter 过滤有多个条件时

使用django的Q对象表示或者

from django.db.models import Q

Person.objects.filter(Q(name='张三') | Q(age=18))

查询过滤字段

__exact 精确等于 like 'aaa'

__iexact 精确等于 忽略大小写 ilike 'aaa'

__contains 包含 like'%aaa%'

__icontains 包含 忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains。

__gt 大于

__gte 大于等于

__lt 小于

__lte 小于等于

__in存在于一个list范围内

*****

__startswith以...开头

__istartswith以...开头忽略大小写

__endswith以...结尾

__iendswith以...结尾,忽略大小写

__range 在...范围内

__year日期字段的年份 如 .filter(add_time_year ='2018') 筛选添加时间年份为2018年的数据

__month日期字段的月份

__day日期字段的日

__isnull=True/False

以上这篇django filter过滤器实现显示某个类型指定字段不同值方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python通过线程实现定时器timer的方法
Mar 16 Python
利用python批量给云主机配置安全组的方法教程
Jun 21 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
Jan 09 Python
使用pygame模块编写贪吃蛇的实例讲解
Feb 05 Python
python Spyder界面无法打开的解决方法
Apr 27 Python
python  Django中的apps.py的目的是什么
Oct 15 Python
Python实现的序列化和反序列化二叉树算法示例
Mar 02 Python
python 对字典按照value进行排序的方法
May 09 Python
django项目中使用手机号登录的实例代码
Aug 15 Python
Python Tkinter图形工具使用方法及实例解析
Jun 15 Python
深入浅析python 中的self和cls的区别
Jun 20 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
Oct 30 Python
解决python对齐错误的方法
Jul 16 #Python
Python爬虫实例——爬取美团美食数据
Jul 15 #Python
django Model层常用验证器及自定义验证器详解
Jul 15 #Python
浅谈Django前端后端值传递问题
Jul 15 #Python
浅谈python出错时traceback的解读
Jul 15 #Python
Django视图、传参和forms验证操作
Jul 15 #Python
一文解决django 2.2与mysql兼容性问题
Jul 15 #Python
You might like
Php部分常见问题总结
2006/10/09 PHP
PHP采集利器 Snoopy 试用心得
2011/07/03 PHP
php cURL和Rolling cURL并发方式比较
2013/10/30 PHP
Server.HTMLEncode让代码在页面里显示为源代码
2013/12/08 PHP
ThinkPHP3.1新特性之查询条件预处理简介
2014/06/19 PHP
功能强大的PHP POST提交数据类
2016/07/15 PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
2019/08/05 PHP
js cookies实现简单统计访问次数
2009/11/24 Javascript
javascript setTimeout()传递函数参数(包括传递对象参数)
2010/04/07 Javascript
js 分页全选或反选标识实现代码
2011/08/09 Javascript
使用js画图之饼图
2015/01/12 Javascript
JavaScript中的Math.sin()方法使用详解
2015/06/15 Javascript
zepto与jquery的区别及zepto的不同使用8条小结
2016/07/28 Javascript
AngularJS中使用ngModal模态框实例
2017/05/27 Javascript
Angular2关于@angular/cli默认端口号配置的问题
2017/07/15 Javascript
JS+canvas实现的五子棋游戏【人机大战版】
2017/07/19 Javascript
js微信应用场景之微信音乐相册案例分享
2017/08/11 Javascript
在 Vue 项目中引入 tinymce 富文本编辑器的完整代码
2018/05/04 Javascript
jquery 通过ajax请求获取后台数据显示在表格上的方法
2018/08/08 jQuery
layui使用表格渲染获取行数据的例子
2019/09/13 Javascript
详解React中共享组件逻辑的三种方式
2021/02/02 Javascript
JavaScript实现手风琴效果
2021/02/18 Javascript
Webpack3+React16代码分割的实现
2021/03/03 Javascript
用Python展示动态规则法用以解决重叠子问题的示例
2015/04/02 Python
windows上安装Anaconda和python的教程详解
2017/03/28 Python
对pandas处理json数据的方法详解
2019/02/08 Python
python中的协程深入理解
2019/06/10 Python
Python实现的爬取豆瓣电影信息功能案例
2019/09/15 Python
深入了解Python 变量作用域
2020/07/24 Python
Html5 new XMLHttpRequest()监听附件上传进度
2021/01/14 HTML / CSS
瑞士灯具购物网站:Lampenwelt.ch
2018/07/08 全球购物
JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
2013/07/02 面试题
新年晚会主持词
2014/03/24 职场文书
2014党员民主评议个人思想剖析发言
2014/09/19 职场文书
小学少先队活动总结
2015/05/08 职场文书
python中pandas.read_csv()函数的深入讲解
2021/03/29 Python