|
3 | 3 |
|
4 | 4 | from django.contrib.contenttypes.models import ContentType
|
5 | 5 | from django.db import models
|
6 |
| -from django.db.models import Case, Count, Q, When |
| 6 | +from django.db.models import Case, Count, FilteredRelation, Q, When |
7 | 7 | from django.db.utils import IntegrityError
|
8 | 8 | from django.test import TransactionTestCase
|
9 | 9 |
|
@@ -1064,6 +1064,39 @@ def ComplexAgg(expression):
|
1064 | 1064 | ):
|
1065 | 1065 | Model2A.objects.aggregate(ComplexAgg("Model2B___field2"))
|
1066 | 1066 |
|
| 1067 | + def test_polymorphic__filtered_relation(self): |
| 1068 | + """ test annotation using FilteredRelation """ |
| 1069 | + |
| 1070 | + blog = BlogA.objects.create(name="Ba1", info="i1 joined") |
| 1071 | + blog.blogentry_set.create(text="bla1 joined") |
| 1072 | + blog.blogentry_set.create(text="bla2 joined") |
| 1073 | + blog.blogentry_set.create(text="bla3 joined") |
| 1074 | + blog.blogentry_set.create(text="bla4") |
| 1075 | + blog.blogentry_set.create(text="bla5") |
| 1076 | + BlogA.objects.create(name="Ba2", info="i2 joined") |
| 1077 | + BlogA.objects.create(name="Ba3", info="i3") |
| 1078 | + BlogB.objects.create(name="Bb3") |
| 1079 | + |
| 1080 | + result = BlogA.objects.annotate( |
| 1081 | + text_joined=FilteredRelation("blogentry", condition=Q(blogentry__text__contains="joined")), |
| 1082 | + ).aggregate(Count("text_joined")) |
| 1083 | + self.assertEqual(result, {"text_joined__count": 3}) |
| 1084 | + |
| 1085 | + result = BlogA.objects.annotate( |
| 1086 | + text_joined=FilteredRelation("blogentry", condition=Q(blogentry__text__contains="joined")), |
| 1087 | + ).aggregate(count=Count("text_joined")) |
| 1088 | + self.assertEqual(result, {"count": 3}) |
| 1089 | + |
| 1090 | + result = BlogBase.objects.annotate( |
| 1091 | + info_joined=FilteredRelation("bloga", condition=Q(BlogA___info__contains="joined")), |
| 1092 | + ).aggregate(Count("info_joined")) |
| 1093 | + self.assertEqual(result, {"info_joined__count": 2}) |
| 1094 | + |
| 1095 | + result = BlogBase.objects.annotate( |
| 1096 | + info_joined=FilteredRelation("bloga", condition=Q(BlogA___info__contains="joined")), |
| 1097 | + ).aggregate(count=Count("info_joined")) |
| 1098 | + self.assertEqual(result, {"count": 2}) |
| 1099 | + |
1067 | 1100 | def test_polymorphic__expressions(self):
|
1068 | 1101 |
|
1069 | 1102 | from django.db.models.functions import Concat
|
|
0 commit comments