他のQuerySetから同じQuerySetを抽出したい場合(Django)

今回はDjangoで他のQuerySetから同じQuerySetを抽出したいときどうすれば良いのかについてご紹介いたします。



他のQuerySetから同じQuerySetを抽出したい場合(Django)

例として、次のBookオブジェクトを持つモデル構造があるとします。

次のようにBookオブジェクトは今三つ持っているとします。

このBook.objects.all()を打って取ってきて格納したbAllを、他のオブジェクトcopyed_bAllに再度Book.objects.all()を使わずに格納したいとします。

結論を書くと、bAllのそれぞれのオブジェクトにはidが振られてますよね。

やり方としては、このidを利用して再度クエリを発行して一つずつオブジェクトを取得していくという流れになります。

では、どうやって一つずつオブジェクトを取っていくかというと、filterの〇〇__inの検索を使い、Book.objects.filter(id__in=××)という形で取っていきます。××は先程のbAllを入れるだけです。

シェルとシェルを叩いた結果の例は次のようになります。

少し無理やり感がありますが、内部で勝手にうまくやってQuerySetからidのリストを取ってきているようです。
非常に便利ですね。

補足ですが、どういうときにこの技術を使うかというと、QuerySetに新しいfieldを自分で定義してそれをリセットしたいときなどに使えます。

終わりに

今回は他のQuerySetから同じQuerySetを抽出したい場合についてご紹介いたしました。

最後までお読みいただきありがとうございます。
よろしければブログやTwitterでのシェアをお願いいたします。
コメントもお待ちしております。
誤植や勘違いなどございましたらコメント欄にて教えていただけると幸いです。






Django

Posted by ちこ