最近学習したアウトプットとしてこの記事を書きました。
例えばこんなmodelがあるとします。
class Hoge(models.Model):
title = models.CharField('タイトル', max_length=40)
description = models.CharField('説明', max_length=100)
created = models.DateTimeField('作成日時', auto_now_add=True)
updated = models.DateTimeField('更新日時', auto_now=True)
all()
やfilter()
を使ってデータを取得すると思うのですが
基本的に全てのフィールドが取得されますよね?
only()
を使うことで指定したフィールドのみの取得
defer()
を使うことで指定したフィールド以外の取得が出来ます。
Hoge.objects.only('title', 'description')
基本的にはこれでtitle
、description
のみ取得出来ます
かと思いきやそうではなく他のデータもテンプレートで指定すると取得出来ます。
ただしその場合SQLが乱発されて遅くなるので注意が必要です。
Hoge.objects.defer('created', 'updated')
これも基本的にはcreated
、updated
以外の取得が出来る
テンプレートでcreated
やupdated
指定すると取得出来ます。
その場合もやはりSQLが乱発されて遅くなるので注意が必要です。
膨大なデータがあるときに使用を検討してもいいかもしれませんが誤った使い方をすると却って遅くなることがあるので注意して使うといいかもしれませんね。
もっと詳しい方がご覧になったらご指摘とかいただけたら嬉しいです!