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查找中。所以我不认为这样更好。请提前帮助我,谢谢。
发布于 2013-05-21 11:42:07
问题不在于“调用模型方法是否加载整个对象”,因为这与此无关。“整个对象的加载”已经由get调用完成。该方法将对该调用返回的模型对象进行操作,除非您另外指定(例如,使用defer或only),否则它将是整个对象。
发布于 2013-06-26 00:36:14
当您使用get或filter,然后访问这些查询集中的对象或对象时,当您使用要访问的模型的字段时,才不会得到额外的查询。例如,在您的示例中,这些字段将是first_name和last_name。
但如果你有其他型号的外键,那就不一样了。当您尝试访问该模型的字段时,您以前所做的简单查询不会从数据库中获得另一个对象。因此,当您尝试访问它时,您将访问另一个时间到您的数据库。要解决这个问题,您应该查看select_related和prefetch_related的文档。
希望能帮上忙!
https://stackoverflow.com/questions/16668998
复制相似问题