Yura YuLife

ITエンジニアの覚え書き。

DjangoのQuerySetでランダムに要素を取得

例えば、SomeModelというモデルクラスのインスタンスを10個取得する場合。

random_query_set = SomeModel.objects.order_by('?')[:10]

QuerySet API reference | Django documentation | Django

ただし、リファレンスによるとバックエンドで利用しているDBによっては、order_by('?')は非常に遅くなる場合があるので利用には注意が必要です、とのこと。

下記サイトの情報によると、MySQLではORDER BY ?は非常に計算コストがかかるらしいです。

snipplr.com