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查找。所以我认为这不会更好。 请帮我出来 在此先感谢。
所以将使用延迟或只使用值相同Django文档指定在构建具有延迟字段的模型时存在轻微的开销。我不完全能够理解的是,开销是多少,如果它更好地使用价值的东西。 –
不,'defer' /'只'给你一个实际的模型实例,你可以在其上调用你的方法,但是缺少一些字段。 'values'给你一个字典,而不是一个实例,所以你不能调用你的方法。在这一点上,虽然我不禁感到你在过度优化:你是否检查过这实际上是一个瓶颈? –
那么你是说调用model.objects.only('first_name','last_name')。get()。full_name()将与调用values方法相同。但我认真地怀疑这是唯一的方法是防止从sql到python对象的转换,而不是在sql级别查找。所以我认为这可能不会那么快。 –