目前还不知道怎么在页面级进行调试代码。虽然我安装上了Debug工具条还是不行!
目前的做法是基于manage.py shell 命令行处理的!
现在整理下常用的一些命令如下:
1.比如说我想调试
Models.objects.all()
这样的语句的话怎么办呢?
我一开始的做法是:
p = Models.objects.all()
for ele in p:
print p['id']
这样是不行的
正确的做法可以参考如下:
- >>> queryset = Poll.objects.all()
- >>> print [p.headline for p in queryset]
当然这里面的headline是这个字段名称的!
来看下如果我有多个条件的话如何处理
>>> from servermonitor.serverhardware.models import ServerHardware>>> p1 = ServerHardware.objects.all()>>> print [obj.id for obj in p1][17L, 12L, 13L, 18L, 15L, 16L, 14L]>>> p1 = p1.filter(h_serial__contains='a')>>> print [obj.id for obj in p1][12L, 15L]>>> p1 = p1.filter(h_type__contains='a')>>> print [obj.id for obj in p1][12L]{这就证明了我们的写法是正常的呀!}
每个QuerySet都包含一个缓存,以尽量减少对数据库的访问。理解他的工作原理很重要,可以写出最高效的代码。
在最新创建的QuerySet里,缓存是空的。在第一次QuerySet
被取值,因此数据库查询发生,django把查询结果放入缓存,并返回给请求,随后的查询取值会复用缓存中的结果。
保持缓存的思想习惯,因为如果你不正确使用查询缓存会有麻烦。例如下面例子会创建两个QuerySet
- >>> print [e.headline for e in Entry.objects.all()]
- >>> print [e.pub_date for e in Entry.objects.all()]
>>> print [e.headline for e in Entry.objects.all()]
>>> print [e.pub_date for e in Entry.objects.all()]
这样意味着数据库查询会执行两次,实际两次数据库加载
为了避免这个问题,简单保存QuerySet
复用
- >>> queryset = Poll.objects.all()
- >>> print [p.headline for p in queryset]
- >>> print [p.pub_date for p in queryset]
阅读(763) | 评论(0) | 转发(0) |