2016-10-21 50 views
0

對不起,我不確定如何正確描述它。Django - 基於同一對象上的過濾器在不同變量之間停止同步

說,我有一個名爲News模型,變量news將被用於存儲未讀News與屬性read=False過濾結果,並標記這些newsread=True,然後返回這些news到模板。問題是,在更新read=True之後,應該存儲初始未讀的news的原始變量news將變爲空的。這背後的方法是什麼以及如何停止這種同步?

代碼示例:

class News(models.Model): 
    ... 
    read = models.BooleanField(default=False) 

def foo(self): 
    news = News.object.filter(read=False) # get un-read news correctly 
    news.update(read=True) # update stored news successfully, but news will become empty 

    return news # return empty news instead of original filter result 

謝謝您的回答。

回答

2

因爲querysets are lazy。只有在實際遍歷查詢集時纔會對結果進行評估,該查詢集可能在您的代碼中發生在模板中。

你可以轉換到一個列表第一:

news_to_read = list(news) 
news.update(read=True) 
return news_to_read 

,但如果你使用分頁要小心,你現在評估一整套的未讀項目,而不僅僅是一個頁面的價值。

+0

感謝您的回答和超級有用的參考,完美地解決了我的問題。 – StopIteration404