首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django模型优化

Django模型优化
EN

Stack Overflow用户
提问于 2013-05-21 11:33:42
回答 2查看 203关注 0票数 1
代码语言:javascript
复制
Class Model(models.Model):
   .......
   .......
   .......
   .......
   first_name = models.CHarField(max_length = 50)
   last_name = models.CharField(ma_lenghth = 50)

   def full_name():
      return '%s %s' %(self.first_name, self.last_name)
  • 调用Models.objects.get().full_name()将是有效的

  • Model.objects.filter().values('first_name, 'last_name')和比以后添加字符串更好。

问题在于数据库优化。基本上,我想知道调用模型的方法是否加载整个对象。如果不是我感觉不到的话,这两种方法都会导致相同的数据库操作,但是如果它加载整个对象而不是值,那么方法将是更好的优化。

请回复。如果您有此主题的话,请与您分享任何经验,如果您有此主题,还可以分享用于比较的任何统计数据。请注意,这是一个示例,而不是实际的用例,模型还包含许多其他字段。

很少有人会觉得使用defer()only()也会产生预期的结果。但是我在django文档中发现的是,它基本上只阻止这些字段数据被转换为python对象,而不是在sql查找中。所以我不认为这样更好。请提前帮助我,谢谢。

EN

回答 2

Stack Overflow用户

发布于 2013-05-21 11:42:07

问题不在于“调用模型方法是否加载整个对象”,因为这与此无关。“整个对象的加载”已经由get调用完成。该方法将对该调用返回的模型对象进行操作,除非您另外指定(例如,使用deferonly),否则它将是整个对象。

票数 0
EN

Stack Overflow用户

发布于 2013-06-26 00:36:14

当您使用getfilter,然后访问这些查询集中的对象或对象时,当您使用要访问的模型的字段时,才不会得到额外的查询。例如,在您的示例中,这些字段将是first_namelast_name

但如果你有其他型号的外键,那就不一样了。当您尝试访问该模型的字段时,您以前所做的简单查询不会从数据库中获得另一个对象。因此,当您尝试访问它时,您将访问另一个时间到您的数据库。要解决这个问题,您应该查看select_relatedprefetch_related的文档。

希望能帮上忙!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16668998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档