Django F對象的使用


概念

class F
F()是代表模型字段的值,也就是說對於一些特殊的字段的操作,我們不需要用Python把數據先取到內存中,然后操作,在存儲到db中了。

 

場景

例1:我們有個統計點擊量的字段,每次更新的操作其實就是把字段的值加1.

一般我們的做法是把這條記錄取出來,把相應字段加+1,然后在save,類似下面的代碼:

# Tintin filed a news story!
reporter = Reporters.objects.get(name='Tintin')
reporter.stories_filed += 1
reporter.save()



當我們使用了F()之后呢? 只需要一行代碼
Reporters.objects.filter(name='Tintin').update(stories_filed=F('stories_filed') + 1)

不僅代碼量少了,而且這是直接在數據中操作,效率也變高了,特別是並發的情況,減少了多線程同時操作帶來的隱患。 但是不支持字符串相加的操作


例2: 一個合同有兩個日期,一個叫做終止日期,一個叫做結束日期,現在要篩選出終止日期小於結束日期的合同。
rom django.db.models import F
from contracts.models import Contracts
contracts = Contracts.objects.filter(contract_stop_time__lt=F('end_time'))
如果沒有F對象,就沒法直接使用rom來查詢。




使用場景待續.....


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM