日志消息中Django QuerySet的延迟评估

时间:2013-06-23 05:56:45

标签: python django

如果我的日志级别设置为INFO,则以下两行都将导致仍然评估查询集,即使数据未打印:

logger.debug("Count is %s"%Widget.objects.count())
logger.debug("Count is %s", Widget.objects.count())

有没有办法避免这种情况?

2 个答案:

答案 0 :(得分:2)

我在这里找到了答案:

https://stackoverflow.com/a/4149190/390973

class Lazy(object):
    def __init__(self,func):
        self.func=func
    def __str__(self):
        return self.func()

logger.debug(Lazy(lambda: "Count is %s"%Widget.objects.count()))

答案 1 :(得分:0)

唯一的方法是将值存储在变量

obj_count = Widget.objects.count()
logger.debug("Count is %d"% obj_count)
logger.debug("Count is %d", obj_count)