1,前端样式
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过滤器实现显示某个类型指定字段不同值方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 《暗喻幻想》顺风耳作用介绍
- 崔健1985-梦中的倾诉[再版][WAV+CUE]
- 黄子馨《追星Xin的恋人们2》HQ头版限量编号[WAV+CUE]
- 孟庭苇《情人的眼泪》开盘母带[低速原抓WAV+CUE]
- 孙露《谁为我停留HQCD》[低速原抓WAV+CUE][1.1G]
- 孙悦《时光音乐会》纯银CD[低速原抓WAV+CUE][1.1G]
- 任然《渐晚》[FLAC/分轨][72.32MB]
- 英雄联盟新英雄安蓓萨上线了吗 新英雄安蓓萨技能介绍
- 魔兽世界奥杜尔竞速赛什么时候开启 奥杜尔竞速赛开启时间介绍
- 无畏契约CGRS准星代码多少 CGRS准星代码分享一览
- 张靓颖.2012-倾听【少城时代】【WAV+CUE】
- 游鸿明.1999-五月的雪【大宇国际】【WAV+CUE】
- 曹方.2005-遇见我【钛友文化】【WAV+CUE】
- Unity6引擎上线:稳定性提升、CPU性能最高提升4倍
- 人皇Sky今日举行婚礼!电竞传奇步入新篇章