Skip to content

Commit 0abde43

Browse files
authored
Merge pull request #639 from jazzband/django51-compat-_process_aggregate_args
Add aggregate query on empty tables tests for dj 5.1+ compat
2 parents 6347e90 + 06c6276 commit 0abde43

File tree

3 files changed

+106
-1
lines changed

3 files changed

+106
-1
lines changed

polymorphic/tests/migrations/0001_initial.py

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2064,4 +2064,86 @@ class Migration(migrations.Migration):
20642064
},
20652065
bases=("auth.group", models.Model),
20662066
),
2067+
migrations.CreateModel(
2068+
name="ModelArticle",
2069+
fields=[
2070+
(
2071+
"id",
2072+
models.AutoField(
2073+
auto_created=True,
2074+
primary_key=True,
2075+
serialize=False,
2076+
verbose_name="ID",
2077+
),
2078+
),
2079+
(
2080+
"polymorphic_ctype",
2081+
models.ForeignKey(
2082+
editable=False,
2083+
null=True,
2084+
on_delete=django.db.models.deletion.CASCADE,
2085+
related_name="polymorphic_oms.article_set+",
2086+
to="contenttypes.contenttype",
2087+
),
2088+
),
2089+
(
2090+
"sales_points",
2091+
models.IntegerField(null=True),
2092+
),
2093+
],
2094+
),
2095+
migrations.CreateModel(
2096+
name="ModelPackage",
2097+
fields=[
2098+
(
2099+
"modelarticle_ptr",
2100+
models.OneToOneField(
2101+
auto_created=True,
2102+
on_delete=django.db.models.deletion.CASCADE,
2103+
parent_link=True,
2104+
primary_key=True,
2105+
serialize=False,
2106+
to="tests.modelarticle",
2107+
),
2108+
),
2109+
("name", models.CharField(max_length=100)),
2110+
],
2111+
bases=("tests.modelarticle", models.Model),
2112+
),
2113+
migrations.CreateModel(
2114+
name="ModelComponent",
2115+
fields=[
2116+
(
2117+
"modelarticle_ptr",
2118+
models.OneToOneField(
2119+
auto_created=True,
2120+
on_delete=django.db.models.deletion.CASCADE,
2121+
parent_link=True,
2122+
primary_key=True,
2123+
serialize=False,
2124+
to="tests.modelarticle",
2125+
),
2126+
),
2127+
("name", models.CharField(max_length=100)),
2128+
],
2129+
bases=("tests.modelarticle", models.Model),
2130+
),
2131+
migrations.CreateModel(
2132+
name="ModelOrderLine",
2133+
fields=[
2134+
(
2135+
"id",
2136+
models.AutoField(
2137+
auto_created=True,
2138+
primary_key=True,
2139+
serialize=False,
2140+
verbose_name="ID",
2141+
),
2142+
),
2143+
(
2144+
"articles",
2145+
models.ManyToManyField(related_name="modelorderline", to="tests.ModelArticle"),
2146+
),
2147+
]
2148+
)
20672149
]

polymorphic/tests/models.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,22 @@ class ModelWithMyManager2(ShowFieldTypeAndContent, Model2A):
189189
field4 = models.CharField(max_length=10)
190190

191191

192+
class ModelArticle(PolymorphicModel):
193+
sales_points = models.IntegerField()
194+
195+
196+
class ModelPackage(ModelArticle):
197+
name = models.CharField(max_length=100)
198+
199+
200+
class ModelComponent(ModelArticle):
201+
name = models.CharField(max_length=100)
202+
203+
204+
class ModelOrderLine(models.Model):
205+
articles = models.ManyToManyField(ModelArticle, related_name="orderline")
206+
207+
192208
class MROBase1(ShowFieldType, PolymorphicModel):
193209
objects = MyManager()
194210
field1 = models.CharField(max_length=10) # needed as MyManager uses it

polymorphic/tests/test_orm.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from django.contrib.contenttypes.models import ContentType
66
from django.db import models
7-
from django.db.models import Case, Count, FilteredRelation, Q, When
7+
from django.db.models import Case, Count, FilteredRelation, Q, Sum, When
88
from django.db.utils import IntegrityError
99
from django.test import TransactionTestCase
1010

@@ -35,6 +35,7 @@
3535
ModelExtraC,
3636
ModelExtraExternal,
3737
ModelFieldNameTest,
38+
ModelOrderLine,
3839
ModelShow1,
3940
ModelShow1_plain,
4041
ModelShow2,
@@ -992,6 +993,12 @@ def test_polymorphic__aggregate(self):
992993
):
993994
Model2A.objects.aggregate(Count("Model2B___field2"))
994995

996+
def test_polymorphic__aggregate_empty_queryset(self):
997+
"""test the fix for test___lookup in Django 5.1+"""
998+
line = ModelOrderLine.objects.create()
999+
result = line.articles.aggregate(Sum("sales_points"))
1000+
assert result == {"sales_points__sum": None}
1001+
9951002
def test_polymorphic__complex_aggregate(self):
9961003
"""test (complex expression on) aggregate (should work for annotate either)"""
9971004

0 commit comments

Comments
 (0)