2016-10-21 1 views
0

混乱した質問については申し訳ありませんが、正しく記述する方法がわかりません。Django - 同じオブジェクトのフィルタに基づいて異なる変数間の同期を停止

は私がNewsという名前のモデル、変数newsは属性read=Falseと非読みNewsのフィルタ結果を格納し、これらの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 

いますが、ページネーションを使用している場合は注意が必要と、あなたは今、未読アイテムのセット全体ではなく、価値が1ページだけを評価しています。

+0

あなたの答えと非常に便利なリファレンスをありがとう、私の問題を完全に解決しました。 – StopIteration404

関連する問題