国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Django項目單字段的區(qū)間查詢

這篇具有很好參考價值的文章主要介紹了Django項目單字段的區(qū)間查詢。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在Django項目中會碰到一些需求就是查詢某個表中的一些字段從某日到某日的數(shù)據(jù),而且是對但字段查詢這個時候我們有兩兩種方法解決

單字段類型是DateTimeField的
查詢?nèi)掌诜秶?這個時候在filter.py里面重寫DateTimeFromToRangeFilter,為什么要重寫呢?
因為我們做區(qū)間查詢 起始與結(jié)束時間兩個日期當(dāng)天的數(shù)據(jù)也需要的,如果不重寫的話起止兩天當(dāng)天的數(shù)據(jù)是沒有的,它的查詢規(guī)則是<=沒有>=這個時候我們就需要去重寫,在獲得結(jié)束日期的時候給它加一天日期即可達到效果>=
注意重寫這個方法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)	
	    # 注意重寫之后需要添加read_only要不然models.py里面的設(shè)置的屬性沒用了
	
	    class Meta:
	        model = ComputerStatusRecord
	        fields = "__all__"

Django項目單字段的區(qū)間查詢,Django,django,sqlite,數(shù)據(jù)庫,python,ORM
方法二
上面的方法單指的是時間字段,方法二可以指認(rèn)到數(shù)字及時間都可以匹配,就是當(dāng)我們get請求進來都會走到get_queryset,這個時候我們可以重寫它返回指定的內(nèi)容做區(qū)間查詢即可。

這個時候我們就不需要指定固定前后綴都可以使用

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

Django項目單字段的區(qū)間查詢,Django,django,sqlite,數(shù)據(jù)庫,python,ORM
技術(shù)小白記錄學(xué)習(xí)過程,有錯誤或不解的地方請指出,如果這篇文章對你有所幫助請點贊 收藏+關(guān)注 期待您的關(guān)注,謝謝支持!文章來源地址http://www.zghlxwxcb.cn/news/detail-713881.html

到了這里,關(guān)于Django項目單字段的區(qū)間查詢的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包