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中使用next()方法操作文件的教程
May 24 Python
Python实现Logger打印功能的方法详解
Sep 01 Python
Django中的CBV和FBV示例介绍
Feb 25 Python
对python中的高效迭代器函数详解
Oct 18 Python
pyspark操作MongoDB的方法步骤
Jan 04 Python
Python格式化字符串f-string概览(小结)
Jun 18 Python
解决Django连接db遇到的问题
Aug 29 Python
在django中form的label和verbose name的区别说明
May 20 Python
使用Python pip怎么升级pip
Aug 11 Python
Python下使用Trackbar实现绘图板
Oct 27 Python
Python Pandas知识点之缺失值处理详解
May 11 Python
pytorch 权重weight 与 梯度grad 可视化操作
Jun 05 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)
2010/09/04 PHP
php环境无法上传文件的解决方法
2014/04/30 PHP
PHP高手需要要掌握的知识点
2014/08/21 PHP
重新认识php array_merge函数
2014/08/31 PHP
PIGCMS 如何关闭聊天机器人
2015/02/12 PHP
ecshop后台编辑器替换成ueditor编辑器
2015/03/03 PHP
javascript实现的listview效果
2007/04/28 Javascript
javascript Prototype 对象扩展
2009/05/15 Javascript
IE6,IE7下js动态加载图片不显示错误
2010/07/17 Javascript
Javascript类库的顶层对象名用户体验分析
2010/10/24 Javascript
浮动的div自适应居中显示的js代码
2013/12/23 Javascript
关于页面嵌入swf覆盖div层的问题的解决方法
2014/02/11 Javascript
在JavaScript中操作时间之getUTCDate()方法的使用
2015/06/10 Javascript
jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法
2017/03/03 Javascript
js实现百度登录框鼠标拖拽效果
2017/03/07 Javascript
r.js来合并压缩css文件的示例
2018/04/26 Javascript
详解vue-cli项目中怎么使用mock数据
2018/05/29 Javascript
命令行批量截图Node脚本示例代码
2019/01/25 Javascript
JavaScript多种页面刷新方法小结
2019/04/04 Javascript
小程序Request的另类用法详解
2019/08/09 Javascript
js代码编写无缝轮播图
2020/09/13 Javascript
Vue使用screenfull实现全屏效果
2020/09/17 Javascript
jQuery实现简单弹幕制作
2020/12/10 jQuery
Vue实现圆环进度条的示例
2021/02/06 Vue.js
[01:08:29]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第一场 1月9日
2021/03/11 DOTA
python基于phantomjs实现导入图片
2016/05/13 Python
python3 打开外部程序及关闭的示例
2018/11/06 Python
python 在屏幕上逐字显示一行字的实例
2018/12/24 Python
Python中如何导入类示例详解
2019/04/17 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
2019/09/18 Python
python程序文件扩展名知识点详解
2020/02/27 Python
经典c++面试题四
2015/05/14 面试题
幼儿园社区活动总结
2014/07/07 职场文书
就业推荐表院系意见
2015/06/05 职场文书
2016年学校十一国庆节活动总结
2016/04/01 职场文书
Python如何把不同类型数据的json序列化
2021/04/30 Python