django filter過(guò)濾器實(shí)現(xiàn)顯示某個(gè)類(lèi)型指定字段不同值方式
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 內(nèi)容如下:
@register.filter(name='ecs_model_field_distinct') def ecs_model_field_distinct(model_name, field_name): ''' 獲取model_name模塊對(duì)象的某個(gè)屬性field_name的distinct值,返回值的數(shù)組 :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()
補(bǔ)充知識(shí):django 模型類(lèi)的常見(jiàn)字段約束,以及filter 過(guò)濾和查詢(xún)
null
不設(shè)置時(shí)默認(rèn)設(shè)置為False。設(shè)置為T(mén)rue時(shí),數(shù)據(jù)庫(kù)表字段中將存入NULL的記錄。 null和blank組合使用,null=True,blank=True,表示該字段可以為空
blank
默認(rèn)設(shè)置為False。設(shè)置為T(mén)rue時(shí),表字段許可無(wú)任何輸入。設(shè)置為False 時(shí),表字段為必須輸入的字段
choices
備選設(shè)置。選擇列表選項(xiàng),如果設(shè)置后,該字段的表單必然會(huì)是下拉選擇的。這個(gè)值必須是一個(gè)有小括號(hào)構(gòu)成的元組,每個(gè)元組前一個(gè)字段將存入數(shù)據(jù)庫(kù),后一個(gè)字段是顯示給用戶(hù)看的。
default
默認(rèn)值,設(shè)置后在用戶(hù)無(wú)輸入時(shí),表字段將以這個(gè)選項(xiàng)的內(nèi)容來(lái)存儲(chǔ)到數(shù)據(jù)庫(kù)字段
可以為python 支持的任意數(shù)據(jù)對(duì)象
editable
如何設(shè)置為False,將不會(huì)參與到表單的驗(yàn)證。默認(rèn)是設(shè)置為T(mén)rue的
error_messages
這個(gè)選項(xiàng)實(shí)現(xiàn)校驗(yàn)時(shí)的錯(cuò)誤提示。是字典結(jié)構(gòu)的內(nèi)容。
help_text
在表單中形成輸入提示內(nèi)容
primary_key
主鍵,設(shè)置為 True ,該字段將啟用為主鍵。 默認(rèn)是 False
unique
設(shè)置為 True 啟用不存在重復(fù)值輸入的設(shè)定,默認(rèn)為False
unique_for_date
設(shè)定日期不存在重復(fù)輸入,默認(rèn)為False
verbose_name
字段的文本標(biāo)簽
validators
校驗(yàn)選項(xiàng),用來(lái)配置校驗(yàn)的方法,構(gòu)成的列表。
max_length
最大輸入字符串的長(zhǎng)度
min_length
最少輸入字符串的長(zhǎng)度
AutoField
自動(dòng)增值的id字段
primary_key=True
為必設(shè)置選項(xiàng)
BigAutoField
自動(dòng)增值的id字段
支持 1 到 9223372036854775807,之間的序號(hào)
BigIntegerField
長(zhǎng)整形字段
從 -9223372036854775808 到9223372036854775807 的整數(shù)
BinaryField
二進(jìn)制字段
存儲(chǔ)內(nèi)存二進(jìn)制數(shù)據(jù),以 python bytes 對(duì)象來(lái)訪問(wèn)
BooleanField
布爾值字段
如果許可空的布爾值輸入,換用 NullBooleadField
CharField
可變長(zhǎng)字符串字段
max_length
有最大輸入選項(xiàng)為必須設(shè)置的選項(xiàng)
DateField
日期字段
auto_now:
每一次保存對(duì)象時(shí),Django 都會(huì)自動(dòng)將該字段的值設(shè)置為當(dāng)前時(shí)間。一般用來(lái)表示 "最后修改" 時(shí)間。要注意使用的是當(dāng)前日期,而并非默認(rèn)值,所以
不能通過(guò)重寫(xiě)默認(rèn)值的辦法來(lái)改變保存時(shí)間。
auto_now_add:
在第一次創(chuàng)建對(duì)象時(shí),Django 自動(dòng)將該字段的值設(shè)置為當(dāng)前時(shí)間,一般用來(lái)表示對(duì)象創(chuàng)建時(shí)間。它使用的同樣是當(dāng)前日期,而非默認(rèn)值
DateTimeField
有時(shí)刻的日期字段
auto_now=False
auto_now_add=False
當(dāng)auto_now或者auto_now_add設(shè)置為T(mén)rue時(shí),字段會(huì)有editable=True和blank=True的設(shè)定
; 固定精度的十進(jìn)制數(shù)的字段。
它有兩個(gè)必須的參數(shù)
max_digits:
數(shù)字允許的最大位數(shù)
decimal_places:
小數(shù)的最大位數(shù)
例如,要存儲(chǔ)的數(shù)字最大值是999,而帶有兩個(gè)小數(shù)位,你可以使用
models.DecimalField(..., max_digits=5, decimal_places=2)
DurationField
日期時(shí)間增量型字段,存儲(chǔ)著python timedelta 類(lèi)數(shù)據(jù)
EmailField
郵件字段
FileField
文件字段
FilePathField
文件路徑字段
FloatField
小數(shù)字段
ImageField
圖片字段
IntegerField
整數(shù)字段
GenericIPAddressField ip
地址字段
NullBooleanField
許可null的布爾值字段
PositiveIntegerField
0 到 2147483647,支持所有數(shù)據(jù)庫(kù)取值范圍的安全整數(shù)。
PositiveSmallIntegerField
0 到 32767 支持所有數(shù)據(jù)庫(kù)取值范圍的安全短整數(shù)。
SlugField
SmallIntegerField
短整形字段
TextField
備注型字段,用于存儲(chǔ)復(fù)雜
TimeField
時(shí)間字段
URLField
網(wǎng)址字段
UUIDField
Python UUID
數(shù)據(jù)對(duì)象,一個(gè)32位長(zhǎng)度的ID字符串
映射字段
ForeignKeyField
一對(duì)多字段
映射字段
ManyToManyField
多對(duì)多字段
映射字段
OneToOneField
一對(duì)一字段
表的查詢(xún)
查詢(xún)
Person.objects.all().order_by(“-username”) 按照username字段值 反向排序
Person.objects.all()[:10]切片操作,獲取10個(gè)人,不支持負(fù)索引,切片可以節(jié)約內(nèi)存,不支持負(fù)切片
Person.objects.get(name=name) get獲取不到報(bào)異常,不可取
get是用來(lái)獲取一個(gè)對(duì)象的,如果需要獲取滿(mǎn)足條件的一些人,就要用到filter
Person.objects.filter(name="abc")# 等于
Person.objects.filter(name__exact="abc")名稱(chēng)嚴(yán)格等于 "abc" 的人
Person.objects.filter(name__iexact="abc")# 名稱(chēng)為abc 但是不區(qū)分大小寫(xiě),可以找到ABC, Abc, aBC,這些都符合條件
***Person.objects.filter(name__contains="abc")# 名稱(chēng)中包含"abc"的人
***Person.objects.filter(name__icontains="abc")#名稱(chēng)中包含"abc",且abc不區(qū)分大小寫(xiě)
Person.objects.filter(name__regex="^abc")# 正則表達(dá)式查詢(xún)
Person.objects.filter(name__iregex="^abc")#正則表達(dá)式不區(qū)分大小寫(xiě)
****
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
數(shù)據(jù)的歸檔
times = Person.objects.datas('add_time','month',order='desc') 默認(rèn)正序,desc 倒序
month 表示精準(zhǔn)到月
前端頁(yè)面
{% for time in times %}
{{ time.year }} 年 {{time.month}} 月 {{time.day}}日 精準(zhǔn)到月,這個(gè)time.day 永遠(yuǎn)是 1
{% endfor %}
filter 過(guò)濾有多個(gè)條件時(shí)
使用django的Q對(duì)象表示或者
from django.db.models import Q
Person.objects.filter(Q(name='張三') | Q(age=18))
查詢(xún)過(guò)濾字段
__exact 精確等于 like 'aaa'
__iexact 精確等于 忽略大小寫(xiě) ilike 'aaa'
__contains 包含 like'%aaa%'
__icontains 包含 忽略大小寫(xiě) ilike '%aaa%',但是對(duì)于sqlite來(lái)說(shuō),contains的作用效果等同于icontains。
__gt 大于
__gte 大于等于
__lt 小于
__lte 小于等于
__in存在于一個(gè)list范圍內(nèi)
*****
__startswith以...開(kāi)頭
__istartswith以...開(kāi)頭忽略大小寫(xiě)
__endswith以...結(jié)尾
__iendswith以...結(jié)尾,忽略大小寫(xiě)
__range 在...范圍內(nèi)
__year日期字段的年份 如 .filter(add_time_year ='2018') 篩選添加時(shí)間年份為2018年的數(shù)據(jù)
__month日期字段的月份
__day日期字段的日
__isnull=True/False
以上這篇django filter過(guò)濾器實(shí)現(xiàn)顯示某個(gè)類(lèi)型指定字段不同值方式就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 在django中查詢(xún)獲取數(shù)據(jù),get, filter,all(),values()操作
- Django:使用filter的pk進(jìn)行多值查詢(xún)操作
- 解決導(dǎo)入django_filters不成功問(wèn)題No module named ''django_filter''
- django model 條件過(guò)濾 queryset.filter(**condtions)用法詳解
- django admin管理工具自定義時(shí)間區(qū)間篩選器DateRangeFilter介紹
- Django models filter篩選條件詳解
- django 自定義過(guò)濾器(filter)處理較為復(fù)雜的變量方法
- Django filter動(dòng)態(tài)過(guò)濾與排序?qū)崿F(xiàn)過(guò)程解析
相關(guān)文章
python爬蟲(chóng)搭配起B(yǎng)ilibili唧唧的流程分析
這篇文章主要介紹了python爬蟲(chóng)搭配起B(yǎng)ilibili唧唧的流程分析,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12python selenium 獲取標(biāo)簽的屬性值、內(nèi)容、狀態(tài)方法
今天小編就為大家分享一篇python selenium 獲取標(biāo)簽的屬性值、內(nèi)容、狀態(tài)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06Python matplotlib如何刪除subplots中多余的空白子圖
這篇文章主要介紹了Python matplotlib如何刪除subplots中多余的空白子圖問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05解決python DataFrame 打印結(jié)果不換行問(wèn)題
這篇文章主要介紹了解決python DataFrame 打印結(jié)果不換行問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04python列表list的index方法的用法和實(shí)例代碼
這篇文章主要介紹了python列表list的index方法的用法和實(shí)例代碼,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05python 使用elasticsearch 實(shí)現(xiàn)翻頁(yè)的三種方式
這篇文章主要介紹了python 使用elasticsearch 實(shí)現(xiàn)翻頁(yè)的三種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07yolov5使用flask部署至前端實(shí)現(xiàn)照片\視頻識(shí)別功能
初學(xué)者在使用YOLO和Flask構(gòu)建應(yīng)用時(shí),往往需要實(shí)現(xiàn)上傳圖片和視頻的識(shí)別功能,本文介紹了如何在Flask框架中實(shí)現(xiàn)這一功能,包括文件上傳、圖片放大查看、視頻識(shí)別以及識(shí)別后的文件下載,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09Python實(shí)現(xiàn)向列表或數(shù)組添加元素
Python中的列表是一種動(dòng)態(tài)數(shù)組,可以存儲(chǔ)不同數(shù)據(jù)類(lèi)型的元素,并提供多種方法進(jìn)行元素的添加和刪除,列表是Python中非常靈活和強(qiáng)大的數(shù)據(jù)結(jié)構(gòu),可以通過(guò)索引訪問(wèn)、修改和操作列表中的元素,列表的創(chuàng)建十分簡(jiǎn)單,只需使用方括號(hào)括起元素,并用逗號(hào)分隔2024-09-09