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級別查找。所以我認爲這可能不會那麼快。 –