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

作者:huoyuanshen 时间:2023-06-21 07:48:26 

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

来源:https://blog.csdn.net/huoyuanshen/article/details/83176386

标签:django,filter,过滤,字段,不同值
0
投稿

猜你喜欢

  • Python对象体系深入分析

    2022-10-25 11:29:33
  • 详解Python:面向对象编程

    2023-10-26 16:17:53
  • 解析JavaScript中的标签语句

    2024-05-13 10:35:07
  • Python中的自定义函数学习笔记

    2023-11-21 15:56:56
  • python中的mock接口开发示例详解

    2023-03-05 00:53:29
  • python3爬取淘宝信息代码分析

    2021-05-03 04:59:11
  • ACCESS数据库的压缩,备份,还原,下载,删除的实现

    2024-01-18 16:16:26
  • 为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景

    2022-02-01 23:19:56
  • python调用百度语音识别实现大音频文件语音识别功能

    2023-11-29 00:59:53
  • FileUpload上传图片预览不变形

    2010-08-05 21:25:00
  • python eventlet绿化和patch原理

    2022-02-22 11:10:14
  • 基于OpenCV(python)的实现文本分割之垂直投影法

    2023-11-17 08:45:39
  • 一文彻底理解JS回调函数

    2024-04-10 10:52:10
  • linux下源码安装mysql5.6.20教程

    2024-01-16 20:13:42
  • jQuery实现网页抖动的菜单抖动效果

    2024-04-19 10:19:04
  • Python Opencv图像处理基本操作代码详解

    2023-06-08 08:08:05
  • 简化版的vue-router实现思路详解

    2024-05-10 14:17:28
  • python数据预处理之将类别数据转换为数值的方法

    2023-04-17 21:43:18
  • MYSQL大数据导入

    2024-01-18 18:09:36
  • Study jQuery in a Simplified Way

    2010-01-30 12:55:00
  • asp之家 网络编程 m.aspxhome.com