亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Django優化方法中的循環

Django優化方法中的循環

慕妹3146593 2021-03-29 15:07:47
我編寫了一種方法來檢查一個屬性,如果有一個藝術家的銷售= False,則返回False,否則返回True。def check_selling(track, excludes):    """    Returns True if all track's artists are allowed for selling. False otherwise    """    for artist in track.artists.all():            if not artist.selling:                excludes.append(track.pk)                return False    return True我該如何最小化?我試過:def check_selling(track, excludes):    res = excludes.append(track.pk) if not [artist.selling for artist in track.artists.all()] else True    return res or False但是[False]或[True]會導致列表理解[track.artists.all()中針對artist.selling的藝術家的銷售]始終給出True ...
查看完整描述

3 回答

?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

進行查詢!


def check_selling(track, excludes):

    """

    Returns True if all track's artists are allowed for selling. False otherwise

    """

    if track.artists.filter(selling=False).exists(): #If "selling" is a boolean

        excludes.append(track)

        return False

    return True

只需一個查詢


查看完整回答
反對 回復 2021-04-02
?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

過早的優化是萬惡之源-唐納德·克努斯(Donald Knuth)

...但是,這不是優化的問題。但是做對了

僅對具有給定屬性的記錄進行計數,檢索所有記錄的效率非常低。您可以在SQL級別上做得更好:

SELECT COUNT(*) FROM artist WHERE SELLING != false

該聲明將直接返回出售藝術家的人數。這不僅會減少RDBMS與您的應用程序之間的通信量-而且在某些情況下,RDBMS將能夠通過使用索引(如果您對“ selling”有一個索引)和/或其索引來“優化”此語句。緩存。根據您的BD后端,語法可能會有所不同。好消息是Django支持使用進行此類查詢。像這樣的東西:count()

artist.objects.filter(selling!=false).count()


查看完整回答
反對 回復 2021-04-02
  • 3 回答
  • 0 關注
  • 223 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號