django-orm F對(duì)象的使用 按照兩個(gè)字段的和,乘積排序?qū)嵗?/h1>
更新時(shí)間:2020年05月18日 10:52:56 作者:Buffing
這篇文章主要介紹了django-orm F對(duì)象的使用 按照兩個(gè)字段的和,乘積排序?qū)嵗哂泻芎玫膮⒖純r(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
class F
F()是代表模型字段的值,也就是說(shuō)對(duì)于一些特殊的字段的操作,我們不需要數(shù)據(jù)先取到內(nèi)存中,然后操作,在存儲(chǔ)到db中了。
以下為幾個(gè)使用的經(jīng)典場(chǎng)景:
1. 統(tǒng)計(jì)點(diǎn)擊量,點(diǎn)贊(每次加1)
from django.db.models import F
Reporters.objects.filter(id=case_id).update(thumb_num=F('thumb_num') + 1)
2.一個(gè)合同字段,結(jié)束日期和終止日期的比較很容易實(shí)現(xiàn) 終止日期小于結(jié)束日期
from django.db.models import F
contract_list = Contracts.objects.filter(contract_stop_time__lt=F('contract_end_time'))
3.如果說(shuō)按照兩個(gè)字段的和,乘積,差進(jìn)行排序,用F類是最好的解決方法,這樣不必要再添加一個(gè)字段了
# 按照總價(jià)逆序取前十個(gè)
goods_list = Goods.objects.all( ).order_by( F('num') * F('unit_price') ).reversed( )[ :10]
# 按照點(diǎn)贊與評(píng)論數(shù)和進(jìn)行排序
hot_list = Article.objects.all( ).order_by( F('thumb_num') + F('comment_num') ).reversed( )
總的來(lái)說(shuō),F(xiàn)對(duì)象支持對(duì)數(shù)據(jù)的算術(shù)運(yùn)算,還有時(shí)間比較操作,真的是query利器。
補(bǔ)充知識(shí):Django查詢數(shù)據(jù)庫(kù)時(shí)各種種類的排序
按照entry_date從小到大查詢數(shù)據(jù),可以寫成:
Content.objects.order_by('entry_date')
從大到小排序:
Content.objects.order_by('-entry_date')
下面介紹其他種類的排序
隨機(jī)排序:
Content.objects.order_by('?')
但是order_by(?)這種方式也許expensive并且slow,這取決于后端數(shù)據(jù)庫(kù)。
按照關(guān)系表的字段排序
class Category(Base):
code = models.CharField(primary_key=True,max_length=100)
title = models.CharField(max_length = 255)
class Content(Base):
title = models.CharField(max_length=255)
description = models.TextField()
category = models.ForeignKey(Category, on_delete=models.CASCADE)
# 按照Category的字段code,對(duì)Content進(jìn)行排序,只需要外鍵后加雙下劃線
Content.objects.order_by('category__title')
# 如果只是按照外鍵來(lái)排序,會(huì)默認(rèn)按照關(guān)聯(lián)的表的主鍵排序
Content.objects.order_by('category')
# 上面等價(jià)于
Content.objects.order_by('category__code')
# 雙下劃線返回的是join后的結(jié)果集,而單下劃線返回的是單個(gè)表的集合
Content.objects.order_by('category_title')
Note: 無(wú)論是單下劃線還是雙下劃線,我們都可用{{ content.category.title }}在前端獲取到關(guān)聯(lián)表的數(shù)據(jù)。
以上這篇django-orm F對(duì)象的使用 按照兩個(gè)字段的和,乘積排序?qū)嵗褪切【幏窒斫o大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
-
Python中的MongoDB基本操作:連接、查詢實(shí)例
這篇文章主要介紹了Python中的MongoDB基本操作:連接、查詢實(shí)例,本文直接給出操作示例代碼,需要的朋友可以參考下 2015-02-02
-
Python3爬蟲里關(guān)于代理的設(shè)置總結(jié)
在本篇文章里小編給大家整理的是一篇關(guān)于Python3爬蟲里關(guān)于代理的設(shè)置總結(jié),需要的朋友們可以參考下。 2020-07-07
-
vscode 與pycharm 配置 autopep8自動(dòng)格式化代碼
autopep8是一個(gè)可以將Python代碼自動(dòng)排版為PEP8風(fēng)格第三方包,使用它可以輕松地排版出格式優(yōu)美整齊的代碼,這里就為大家分享一下具體的方法 2023-09-09
-
淺析關(guān)于Keras的安裝(pycharm)和初步理解
Keras 是一個(gè)用 Python 編寫的高級(jí)神經(jīng)網(wǎng)絡(luò) API,它能夠以 TensorFlow, CNTK, 或者 Theano 作為后端運(yùn)行。這篇文章給大家介紹Keras的安裝(pycharm)和初步理解,感興趣的朋友一起看看吧 2020-10-10
-
python提示No module named images的解決方法
這篇文章主要介紹了python提示No module named images的解決方法,是Python程序設(shè)計(jì)中經(jīng)常遇到的問(wèn)題,本文給出了具有針對(duì)性的解決方法,需要的朋友可以參考下 2014-09-09
-
pytorch 一行代碼查看網(wǎng)絡(luò)參數(shù)總量的實(shí)現(xiàn)
這篇文章主要介紹了pytorch實(shí)現(xiàn)一行代碼查看網(wǎng)絡(luò)參數(shù)總量的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧 2021-05-05
-
淺談JupyterNotebook導(dǎo)出pdf解決中文的問(wèn)題
這篇文章主要介紹了淺談JupyterNotebook導(dǎo)出pdf解決中文的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧 2020-04-04
最新評(píng)論
class F
F()是代表模型字段的值,也就是說(shuō)對(duì)于一些特殊的字段的操作,我們不需要數(shù)據(jù)先取到內(nèi)存中,然后操作,在存儲(chǔ)到db中了。
以下為幾個(gè)使用的經(jīng)典場(chǎng)景:
1. 統(tǒng)計(jì)點(diǎn)擊量,點(diǎn)贊(每次加1)
from django.db.models import F
Reporters.objects.filter(id=case_id).update(thumb_num=F('thumb_num') + 1)
2.一個(gè)合同字段,結(jié)束日期和終止日期的比較很容易實(shí)現(xiàn) 終止日期小于結(jié)束日期
from django.db.models import F
contract_list = Contracts.objects.filter(contract_stop_time__lt=F('contract_end_time'))
3.如果說(shuō)按照兩個(gè)字段的和,乘積,差進(jìn)行排序,用F類是最好的解決方法,這樣不必要再添加一個(gè)字段了
# 按照總價(jià)逆序取前十個(gè) goods_list = Goods.objects.all( ).order_by( F('num') * F('unit_price') ).reversed( )[ :10] # 按照點(diǎn)贊與評(píng)論數(shù)和進(jìn)行排序 hot_list = Article.objects.all( ).order_by( F('thumb_num') + F('comment_num') ).reversed( )
總的來(lái)說(shuō),F(xiàn)對(duì)象支持對(duì)數(shù)據(jù)的算術(shù)運(yùn)算,還有時(shí)間比較操作,真的是query利器。
補(bǔ)充知識(shí):Django查詢數(shù)據(jù)庫(kù)時(shí)各種種類的排序
按照entry_date從小到大查詢數(shù)據(jù),可以寫成:
Content.objects.order_by('entry_date')
從大到小排序:
Content.objects.order_by('-entry_date')
下面介紹其他種類的排序
隨機(jī)排序:
Content.objects.order_by('?')
但是order_by(?)這種方式也許expensive并且slow,這取決于后端數(shù)據(jù)庫(kù)。
按照關(guān)系表的字段排序
class Category(Base): code = models.CharField(primary_key=True,max_length=100) title = models.CharField(max_length = 255) class Content(Base): title = models.CharField(max_length=255) description = models.TextField() category = models.ForeignKey(Category, on_delete=models.CASCADE)
# 按照Category的字段code,對(duì)Content進(jìn)行排序,只需要外鍵后加雙下劃線 Content.objects.order_by('category__title') # 如果只是按照外鍵來(lái)排序,會(huì)默認(rèn)按照關(guān)聯(lián)的表的主鍵排序 Content.objects.order_by('category') # 上面等價(jià)于 Content.objects.order_by('category__code') # 雙下劃線返回的是join后的結(jié)果集,而單下劃線返回的是單個(gè)表的集合 Content.objects.order_by('category_title')
Note: 無(wú)論是單下劃線還是雙下劃線,我們都可用{{ content.category.title }}在前端獲取到關(guān)聯(lián)表的數(shù)據(jù)。
以上這篇django-orm F對(duì)象的使用 按照兩個(gè)字段的和,乘積排序?qū)嵗褪切【幏窒斫o大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python中的MongoDB基本操作:連接、查詢實(shí)例
這篇文章主要介紹了Python中的MongoDB基本操作:連接、查詢實(shí)例,本文直接給出操作示例代碼,需要的朋友可以參考下2015-02-02Python3爬蟲里關(guān)于代理的設(shè)置總結(jié)
在本篇文章里小編給大家整理的是一篇關(guān)于Python3爬蟲里關(guān)于代理的設(shè)置總結(jié),需要的朋友們可以參考下。2020-07-07vscode 與pycharm 配置 autopep8自動(dòng)格式化代碼
autopep8是一個(gè)可以將Python代碼自動(dòng)排版為PEP8風(fēng)格第三方包,使用它可以輕松地排版出格式優(yōu)美整齊的代碼,這里就為大家分享一下具體的方法2023-09-09淺析關(guān)于Keras的安裝(pycharm)和初步理解
Keras 是一個(gè)用 Python 編寫的高級(jí)神經(jīng)網(wǎng)絡(luò) API,它能夠以 TensorFlow, CNTK, 或者 Theano 作為后端運(yùn)行。這篇文章給大家介紹Keras的安裝(pycharm)和初步理解,感興趣的朋友一起看看吧2020-10-10python提示No module named images的解決方法
這篇文章主要介紹了python提示No module named images的解決方法,是Python程序設(shè)計(jì)中經(jīng)常遇到的問(wèn)題,本文給出了具有針對(duì)性的解決方法,需要的朋友可以參考下2014-09-09pytorch 一行代碼查看網(wǎng)絡(luò)參數(shù)總量的實(shí)現(xiàn)
這篇文章主要介紹了pytorch實(shí)現(xiàn)一行代碼查看網(wǎng)絡(luò)參數(shù)總量的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-05-05淺談JupyterNotebook導(dǎo)出pdf解決中文的問(wèn)題
這篇文章主要介紹了淺談JupyterNotebook導(dǎo)出pdf解決中文的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04