Django
でサーバサイドの開発しているときにqueryset
のfilter
メソッドでデータの抽出処理を記述するんですが、取得したデータをクライアントサイドで結合するのがめんどくさくなり、どうにかサーバ側で結合したデータを取得できないか調べてみました。
前提条件
- Python:3.6.2
- Django:3.0.2
実現方法
Django
のqueryset
のextra
メソッドを使用すると実現できそうです。
QuerySet API reference | Django ドキュメント | Django
extra
メソッドを利用するとSELECT
句をそのまま書けるみたいなので、下記のように実装すれば文字列結合済の仮想フィールドを取得できます。
User
モデルに名字(last_name
)、名前(first_name
)がある場合、フルネームを一つのフィールドとして取得したい場合、
users = User.objects.extra(select={'full_name': "concatenate(last_name, first_name)"})
のように実装すれば、「名字 + 名前」を「full_name
」という仮想フィールドで取得することができます。
最後に
サーバサイドでできることはサーバサイドでやっておけば、クライアントサイドの負荷を減らすことができるのでこういったカスタマイズをしっかり覚えておきたいですね。
コメント