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