django filter過濾器實現顯示某個類型指定字段不同值方式
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:
在第一次創(chuàng)建對象時,Django 自動將該字段的值設置為當前時間,一般用來表示對象創(chuàng)建時間。它使用的同樣是當前日期,而非默認值
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個人,不支持負索引,切片可以節(jié)約內存,不支持負切片
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 但是不區(qū)分大小寫,可以找到ABC, Abc, aBC,這些都符合條件
***Person.objects.filter(name__contains="abc")# 名稱中包含"abc"的人
***Person.objects.filter(name__icontains="abc")#名稱中包含"abc",且abc不區(qū)分大小寫
Person.objects.filter(name__regex="^abc")# 正則表達式查詢
Person.objects.filter(name__iregex="^abc")#正則表達式不區(qū)分大小寫
****
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過濾器實現顯示某個類型指定字段不同值方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
- 在django中查詢獲取數據,get, filter,all(),values()操作
- Django:使用filter的pk進行多值查詢操作
- 解決導入django_filters不成功問題No module named ''django_filter''
- django model 條件過濾 queryset.filter(**condtions)用法詳解
- django admin管理工具自定義時間區(qū)間篩選器DateRangeFilter介紹
- Django models filter篩選條件詳解
- django 自定義過濾器(filter)處理較為復雜的變量方法
- Django filter動態(tài)過濾與排序實現過程解析
相關文章
python爬蟲搭配起B(yǎng)ilibili唧唧的流程分析
這篇文章主要介紹了python爬蟲搭配起B(yǎng)ilibili唧唧的流程分析,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12python selenium 獲取標簽的屬性值、內容、狀態(tài)方法
今天小編就為大家分享一篇python selenium 獲取標簽的屬性值、內容、狀態(tài)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06Python matplotlib如何刪除subplots中多余的空白子圖
這篇文章主要介紹了Python matplotlib如何刪除subplots中多余的空白子圖問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05python 使用elasticsearch 實現翻頁的三種方式
這篇文章主要介紹了python 使用elasticsearch 實現翻頁的三種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-07-07