django-orm F對象的使用 按照兩個字段的和,乘積排序?qū)嵗?/h1>
更新時間:2020年05月18日 10:52:56 作者:Buffing
這篇文章主要介紹了django-orm F對象的使用 按照兩個字段的和,乘積排序?qū)嵗?,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
class F
F()是代表模型字段的值,也就是說對于一些特殊的字段的操作,我們不需要數(shù)據(jù)先取到內(nèi)存中,然后操作,在存儲到db中了。
以下為幾個使用的經(jīng)典場景:
1. 統(tǒng)計點擊量,點贊(每次加1)
from django.db.models import F
Reporters.objects.filter(id=case_id).update(thumb_num=F('thumb_num') + 1)
2.一個合同字段,結(jié)束日期和終止日期的比較很容易實現(xiàn) 終止日期小于結(jié)束日期
from django.db.models import F
contract_list = Contracts.objects.filter(contract_stop_time__lt=F('contract_end_time'))
3.如果說按照兩個字段的和,乘積,差進行排序,用F類是最好的解決方法,這樣不必要再添加一個字段了
# 按照總價逆序取前十個
goods_list = Goods.objects.all( ).order_by( F('num') * F('unit_price') ).reversed( )[ :10]
# 按照點贊與評論數(shù)和進行排序
hot_list = Article.objects.all( ).order_by( F('thumb_num') + F('comment_num') ).reversed( )
總的來說,F(xiàn)對象支持對數(shù)據(jù)的算術(shù)運算,還有時間比較操作,真的是query利器。
補充知識:Django查詢數(shù)據(jù)庫時各種種類的排序
按照entry_date從小到大查詢數(shù)據(jù),可以寫成:
Content.objects.order_by('entry_date')
從大到小排序:
Content.objects.order_by('-entry_date')
下面介紹其他種類的排序
隨機排序:
Content.objects.order_by('?')
但是order_by(?)這種方式也許expensive并且slow,這取決于后端數(shù)據(jù)庫。
按照關(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,對Content進行排序,只需要外鍵后加雙下劃線
Content.objects.order_by('category__title')
# 如果只是按照外鍵來排序,會默認按照關(guān)聯(lián)的表的主鍵排序
Content.objects.order_by('category')
# 上面等價于
Content.objects.order_by('category__code')
# 雙下劃線返回的是join后的結(jié)果集,而單下劃線返回的是單個表的集合
Content.objects.order_by('category_title')
Note: 無論是單下劃線還是雙下劃線,我們都可用{{ content.category.title }}在前端獲取到關(guān)聯(lián)表的數(shù)據(jù)。
以上這篇django-orm F對象的使用 按照兩個字段的和,乘積排序?qū)嵗褪切【幏窒斫o大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
-
python實現(xiàn)測試工具(二)——簡單的ui測試工具
這篇文章主要介紹了python如何實現(xiàn)簡單的ui測試工具,幫助大家更好的利用python進行測試工作,感興趣的朋友可以了解下 2020-10-10
-
使用Keras 實現(xiàn)查看model weights .h5 文件的內(nèi)容
這篇文章主要介紹了使用Keras 實現(xiàn)查看model weights .h5 文件的內(nèi)容,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 2020-06-06
-
詳解如何在VS Code中安裝Spire.PDF for Python
這篇文章主要為大家詳細介紹了如何在VS Code中安裝Spire.PDF for Python,文中的示例代碼簡潔易懂,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下 2023-10-10
-
python實現(xiàn)提取str字符串/json中多級目錄下的某個值
今天小編就為大家分享一篇python實現(xiàn)提取str字符串/json中多級目錄下的某個值,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 2020-02-02
最新評論
class F
F()是代表模型字段的值,也就是說對于一些特殊的字段的操作,我們不需要數(shù)據(jù)先取到內(nèi)存中,然后操作,在存儲到db中了。
以下為幾個使用的經(jīng)典場景:
1. 統(tǒng)計點擊量,點贊(每次加1)
from django.db.models import F
Reporters.objects.filter(id=case_id).update(thumb_num=F('thumb_num') + 1)
2.一個合同字段,結(jié)束日期和終止日期的比較很容易實現(xiàn) 終止日期小于結(jié)束日期
from django.db.models import F
contract_list = Contracts.objects.filter(contract_stop_time__lt=F('contract_end_time'))
3.如果說按照兩個字段的和,乘積,差進行排序,用F類是最好的解決方法,這樣不必要再添加一個字段了
# 按照總價逆序取前十個
goods_list = Goods.objects.all( ).order_by( F('num') * F('unit_price') ).reversed( )[ :10]
# 按照點贊與評論數(shù)和進行排序
hot_list = Article.objects.all( ).order_by( F('thumb_num') + F('comment_num') ).reversed( )
總的來說,F(xiàn)對象支持對數(shù)據(jù)的算術(shù)運算,還有時間比較操作,真的是query利器。
補充知識:Django查詢數(shù)據(jù)庫時各種種類的排序
按照entry_date從小到大查詢數(shù)據(jù),可以寫成:
Content.objects.order_by('entry_date')
從大到小排序:
Content.objects.order_by('-entry_date')
下面介紹其他種類的排序
隨機排序:
Content.objects.order_by('?')
但是order_by(?)這種方式也許expensive并且slow,這取決于后端數(shù)據(jù)庫。
按照關(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,對Content進行排序,只需要外鍵后加雙下劃線
Content.objects.order_by('category__title')
# 如果只是按照外鍵來排序,會默認按照關(guān)聯(lián)的表的主鍵排序
Content.objects.order_by('category')
# 上面等價于
Content.objects.order_by('category__code')
# 雙下劃線返回的是join后的結(jié)果集,而單下劃線返回的是單個表的集合
Content.objects.order_by('category_title')
Note: 無論是單下劃線還是雙下劃線,我們都可用{{ content.category.title }}在前端獲取到關(guān)聯(lián)表的數(shù)據(jù)。
以上這篇django-orm F對象的使用 按照兩個字段的和,乘積排序?qū)嵗褪切【幏窒斫o大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
python實現(xiàn)測試工具(二)——簡單的ui測試工具
這篇文章主要介紹了python如何實現(xiàn)簡單的ui測試工具,幫助大家更好的利用python進行測試工作,感興趣的朋友可以了解下2020-10-10
使用Keras 實現(xiàn)查看model weights .h5 文件的內(nèi)容
這篇文章主要介紹了使用Keras 實現(xiàn)查看model weights .h5 文件的內(nèi)容,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
詳解如何在VS Code中安裝Spire.PDF for Python
這篇文章主要為大家詳細介紹了如何在VS Code中安裝Spire.PDF for Python,文中的示例代碼簡潔易懂,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-10-10
python實現(xiàn)提取str字符串/json中多級目錄下的某個值
今天小編就為大家分享一篇python實現(xiàn)提取str字符串/json中多級目錄下的某個值,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02

