現場でPythonのDjango Rest frameworkを使っており、随時勉強中です。
Djangoの作法的なものが少しづつわかってきたものの、まだまだ知らないことが多いのでどんどんコード書いて慣れていきたいです。
今日はSQLで言うところのIN句でデータを取得したい場面があり、調べまくった結果なんとか実装できたので参考になったページをメモします。
本記事はメモのみで自分で書いたコードは記載していません。
Django Rest frameworkでは生のSQLはあまり書くことがないみたいでDjangoのビルドイン関数を使ってデータを取得することが一般的なようですが、慣れないうちは使いこなすのが難しいですね。
データの取得方法は以下の記事が非常に参考になりました。
モデル名.objects.filter(カラム名__in=[パラメータの配列])みたいな感じでIN句でデータを取得できるとのこと。
以下は上記ドキュメントに記載されていたコード例
products = Product.objects.filter(name__in=["hoge", "fuga"])
また、公式ドキュメントではURLからパラメータを取得するコード例が書かれていました。
class PurchaseList(generics.ListAPIView): serializer_class = PurchaseSerializer def get_queryset(self): """ Optionally restricts the returned purchases to a given user, by filtering against a `username` query parameter in the URL. """ queryset = Purchase.objects.all() username = self.request.query_params.get('username', None) if username is not None: queryset = queryset.filter(purchaser__username=username) return queryset
なるほど、ということはURLにクエリとして渡したいパラメータをつけてAPIにリクエストを送ればIN句と同じようにデータを取得できそう。