他のQuerySetから同じQuerySetを抽出したい場合(Django)
今回はDjangoで他のQuerySetから同じQuerySetを抽出したいときどうすれば良いのかについてご紹介いたします。
他のQuerySetから同じQuerySetを抽出したい場合(Django)
例として、次のBookオブジェクトを持つモデル構造があるとします。
1 2 3 4 5 6 |
from django.db import models # Create your models here. class Book(models.Model): title = models.CharField(max_length=120) # max_length=required author = models.CharField(max_length=120) # max_length=required |
次のようにBookオブジェクトは今三つ持っているとします。
このBook.objects.all()を打って取ってきて格納したbAllを、他のオブジェクトcopyed_bAllに再度Book.objects.all()を使わずに格納したいとします。
結論を書くと、bAllのそれぞれのオブジェクトにはidが振られてますよね。
やり方としては、このidを利用して再度クエリを発行して一つずつオブジェクトを取得していくという流れになります。
では、どうやって一つずつオブジェクトを取っていくかというと、filterの〇〇__inの検索を使い、Book.objects.filter(id__in=××)という形で取っていきます。××は先程のbAllを入れるだけです。
シェルとシェルを叩いた結果の例は次のようになります。
1 2 3 4 |
>>> >>> Book.objects.filter(id__in = bAll) <QuerySet [<Book: Book object (1)>, <Book: Book object (2)>, <Book: Book object (3)>]> >>> |
少し無理やり感がありますが、内部で勝手にうまくやってQuerySetからidのリストを取ってきているようです。
非常に便利ですね。
補足ですが、どういうときにこの技術を使うかというと、QuerySetに新しいfieldを自分で定義してそれをリセットしたいときなどに使えます。
終わりに
今回は他のQuerySetから同じQuerySetを抽出したい場合についてご紹介いたしました。
ディスカッション
コメント一覧
まだ、コメントがありません