DjangoのQuerySetのannotateでは足し算引き算が定義できる
今回はDjangoのQuerySetのannotateでは足し算引き算が定義できるというお話をしていきます。
DjangoのQuerySetのannotateでは足し算引き算が定義できる
例として、次のAuthorとBookのモデルがあるとします。
1 2 3 4 5 6 7 8 |
class Author(models.Model): author_name = models.CharField(max_length=30) class Book(models.Model): title = models.CharField(max_length=120) author = models.ForeignKey(Author, on_delete=models.PROTECT) price = models.DecimalField(decimal_places=2, max_digits=100, null=True) |
データは次のようなデータがあるとします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
>>> b = Book.objects.all() >>> for bb in b: ... print(bb) ... print(bb.author) ... print() ... Book object (1) Author object (1) Book object (2) Author object (2) Book object (3) Author object (2) |
集計処理の関数であるannotateを使って次のように書くことができます。
Authorモデルに対して、1対多の外部キーであるBookモデルの数に100を足しています。
1 2 3 4 5 6 7 8 9 10 |
>>> from django.db.models import Count >>> sample = Author.objects.all().annotate(test_field=Count('book')+100) >>> for s in sample: ... print(s) ... print(s.test_field) ... Author object (1) 101 Author object (2) 102 |
ORMからSQLに変換するときに、算術で定義できる箇所があれば足し算引き算を使って定義できるみたいです。
終わりに
今回はDjangoのQuerySetのannotateでは足し算引き算が定義できるというお話をいたしました。
ディスカッション
コメント一覧
まだ、コメントがありません