Django項(xiàng)目單字段區(qū)間查詢的實(shí)現(xiàn)
在Django項(xiàng)目中會(huì)碰到一些需求就是查詢某個(gè)表中的一些字段從某日到某日的數(shù)據(jù),而且是對(duì)但字段查詢這個(gè)時(shí)候我們有兩兩種方法解決
單字段類型是DateTimeField的
查詢?nèi)掌诜秶?這個(gè)時(shí)候在filter.py里面重寫(xiě)DateTimeFromToRangeFilter,為什么要重寫(xiě)呢?
因?yàn)槲覀冏鰠^(qū)間查詢 起始與結(jié)束時(shí)間兩個(gè)日期當(dāng)天的數(shù)據(jù)也需要的,如果不重寫(xiě)的話起止兩天當(dāng)天的數(shù)據(jù)是沒(méi)有的,它的查詢規(guī)則是<=沒(méi)有>=這個(gè)時(shí)候我們就需要去重寫(xiě),在獲得結(jié)束日期的時(shí)候給它加一天日期即可達(dá)到效果>=
注意重寫(xiě)這個(gè)方法URL必須按照規(guī)定前綴后綴是 _after 和 _before
http://192.168.31.14:8000/gt_computer/?create_time_after=2023-09-13&create_time_before=2023-09-13
filters.py
class CustomDateTimeFromToRangeFilter(filters.DateTimeFromToRangeFilter): def filter(self, qs, value): if value and value.stop: new_value = slice(value.start, value.stop + timedelta(days=1)) return super().filter(qs, new_value) return super().filter(qs, value) class ComputerFileter(filters.FilterSet): create_time = CustomDateTimeFromToRangeFilter() class Meta: model = ComputerStatusRecord fields = '__all__'
serializers.py
class ComputerSerializer(ModelSerializer): create_time = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", read_only=True) # 注意重寫(xiě)之后需要添加read_only要不然models.py里面的設(shè)置的屬性沒(méi)用了 class Meta: model = ComputerStatusRecord fields = "__all__"
方法二
上面的方法單指的是時(shí)間字段,方法二可以指認(rèn)到數(shù)字及時(shí)間都可以匹配,就是當(dāng)我們get請(qǐng)求進(jìn)來(lái)都會(huì)走到get_queryset,這個(gè)時(shí)候我們可以重寫(xiě)它返回指定的內(nèi)容做區(qū)間查詢即可。
這個(gè)時(shí)候我們就不需要指定固定前后綴都可以使用
views.py
def get_queryset(self): queryset = super().get_queryset() filters = {} for field_name in ['sum_number', 'over_kill_number', 'miss_number', # 需要區(qū)間查詢的字段 'over_kill_rate', 'miss_rate']: after = self.request.query_params.get(f'{field_name}_after') # 可以根據(jù)自己的需求而定 before = self.request.query_params.get(f'{field_name}_before') if after and before: filters[f'{field_name}__gte'] = after filters[f'{field_name}__lte'] = before if filters: queryset = queryset.filter(**filters) # 區(qū)間查詢 return queryset
到此這篇關(guān)于Django項(xiàng)目單字段區(qū)間查詢的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Django 單字段區(qū)間查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python tkinter Entry控件的焦點(diǎn)移動(dòng)操作
這篇文章主要介紹了python tkinter Entry控件的焦點(diǎn)移動(dòng)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05python3+PyQt5使用數(shù)據(jù)庫(kù)窗口視圖
這篇文章主要為大家詳細(xì)介紹了python3+PyQt5使用數(shù)據(jù)庫(kù)窗口視圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04Python實(shí)現(xiàn)單鏈表中元素的反轉(zhuǎn)
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)單鏈表中元素的反轉(zhuǎn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05Python個(gè)人博客程序開(kāi)發(fā)實(shí)例后臺(tái)編寫(xiě)
這篇文章主要介紹了怎樣用Python來(lái)實(shí)現(xiàn)一個(gè)完整的個(gè)人博客系統(tǒng),我們通過(guò)實(shí)操上手的方式可以高效的鞏固所學(xué)的基礎(chǔ)知識(shí),感興趣的朋友一起來(lái)看看吧2022-12-12最新解決沒(méi)有NVSMI文件夾以及nvidia-smi‘?不是內(nèi)部或外部命令也不是可運(yùn)行的程序或批處理文件
這篇文章主要介紹了解決沒(méi)有NVSMI文件夾以及nvidia-smi‘?不是內(nèi)部或外部命令也不是可運(yùn)行的程序或批處理文件,本文通過(guò)兩種問(wèn)題分析給大家分享解決方法,需要的朋友可以參考下2023-01-01Python從csv文件中讀取數(shù)據(jù)及提取數(shù)據(jù)的方法
這篇文章主要介紹了Python從csv文件中讀取數(shù)據(jù)并提取數(shù)據(jù)的方法,文中通過(guò)多種方法給大家講解獲取指定列的數(shù)據(jù),并存入一個(gè)數(shù)組中,每種方法通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-11-11