分享djangoselect.docVIP

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
分享djangoselect

分享django select_related()的一点心得 子类获取父类的对象的问题,直接用子类.子类关联父类的外键就可以访问父类的数据了,但是 这个有个问题,如果你要提高程序的效率,就应该尽量的少去查询数据库。 比如还是上篇文章的例子吧。 class Person(models.Model); name = models.CharField(作者姓名, max_length=10) age = models.IntegerField(作者年龄) class Book(models.Model): person = models.ForeignKey(Person, related_name=person_book) title = models.CharField(书籍名称, max_length=10) pubtime = models.DateField(出版时间) 比如我得到一个book对象,然后我想得到book对象的主表person的信息的话: p = book.person 假设你想获取作者的姓名: 或者作者的年龄: p.age 那其实是等于查询了两次数据库,对于要求效率比较高的朋友来说可能就不符合你的要求,有什么好的办法可以解决的吗? 答案就在今天说的django select_related() 还是拿上面的例子来说吧。 b = Book.objects.select_related().get(id=4) p = # 没有查询数据库 c = p.age # 没有查询数据库 而: b = Book.objects.get(id=4) # No select_related() in this example. p = # 查询了数据库. c = p.age # 查询了数据库. 你也可以控制查询缓存的深度。 b = Book.objects.select_related(depth=1).get(id=4) p = # 没有查询数据库 c = p.age # 查询了数据库. 通过上面的例子,你应该大体的明白django select_related()的作用吧,我感觉django select_related()有点像一种缓存的结构, 把外键的记录一起查询出来,然后放到记录集里,等到下次要用数据的时候就不用再查询数据库了,直接从缓存的记录集里去拿数据。 不过任何事物都有两面性,上面说到了它有利的方面,我大概说说不好的方面,我感觉它既然缓存记录的话,那对于时效性比较强的应用 来说可能就不合适了,数据可以不能及时的被更新,django的有些机制处理还是很不错的,比如: [django template 语法],[django template extends] , [django template filter] 想要了解更多python教程,可以上 老王python: 龙欣SEO 第 3 页 2012-12-28

文档评论(0)

qwd513620855 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档