Django - 根据同一对象上的过滤器停止不同变量之间的同步

时间:2016-10-21 08:38:16

标签: python django python-3.x

对于这个困惑的问题感到抱歉,不确定如何正确描述。

假设我有一个名为News的模型,变量news将用于存储具有属性News的未读read=False的过滤结果,将这些news标记为read=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

感谢您的回答。

1 个答案:

答案 0 :(得分:2)

因为querysets are lazy。在您实际遍历查询集之前,不会对结果进行评估,在您的代码中可能会在模板中进行迭代。

您可以先转换为列表:

if(document.getElementById('#yourinputid').value != ""){
  document.getElementById('#yourinputid').disabled = "false";
}

但是如果你正在使用分页,要小心,你现在正在评估整套未读项目,而不仅仅是一页。