[Django]Queryset で仮想フィールドを定義する

Django Logo プログラミング

Django でサーバサイドの開発しているときに querysetfilter メソッドでデータの抽出処理を記述するんですが、取得したデータをクライアントサイドで結合するのがめんどくさくなり、どうにかサーバ側で結合したデータを取得できないか調べてみました。

前提条件

  • Python : 3.6.2
  • Django : 3.0.2

実現方法

Djangoquerysetextra メソッドを使用すると実現できそうです。

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 」という仮想フィールドで取得することができます。

最後に

サーバサイドでできることはサーバサイドでやっておけば、クライアントサイドの負荷を減らすことができるのでこういったカスタマイズをしっかり覚えておきたいですね。

コメント

モバイルバージョンを終了
タイトルとURLをコピーしました