|
@@ -27,6 +27,7 @@ from django.db.models import (
|
|
|
)
|
|
|
from django.db.models.expressions import RawSQL
|
|
|
from django.db.models.fields.json import (
|
|
|
+ KT,
|
|
|
KeyTextTransform,
|
|
|
KeyTransform,
|
|
|
KeyTransformFactory,
|
|
@@ -374,11 +375,7 @@ class TestQuerying(TestCase):
|
|
|
qs = NullableJSONModel.objects.filter(value__isnull=False)
|
|
|
self.assertQuerysetEqual(
|
|
|
qs.filter(value__isnull=False)
|
|
|
- .annotate(
|
|
|
- key=KeyTextTransform(
|
|
|
- "f", KeyTransform("1", KeyTransform("d", "value"))
|
|
|
- ),
|
|
|
- )
|
|
|
+ .annotate(key=KT("value__d__1__f"))
|
|
|
.values("key")
|
|
|
.annotate(count=Count("key"))
|
|
|
.order_by("count"),
|
|
@@ -1078,3 +1075,20 @@ class TestQuerying(TestCase):
|
|
|
).filter(chain=F("related_key__0")),
|
|
|
[related_obj],
|
|
|
)
|
|
|
+
|
|
|
+ def test_key_text_transform_from_lookup(self):
|
|
|
+ qs = NullableJSONModel.objects.annotate(b=KT("value__bax__foo")).filter(
|
|
|
+ b__contains="ar",
|
|
|
+ )
|
|
|
+ self.assertSequenceEqual(qs, [self.objs[7]])
|
|
|
+ qs = NullableJSONModel.objects.annotate(c=KT("value__o")).filter(
|
|
|
+ c__contains="uot",
|
|
|
+ )
|
|
|
+ self.assertSequenceEqual(qs, [self.objs[4]])
|
|
|
+
|
|
|
+ def test_key_text_transform_from_lookup_invalid(self):
|
|
|
+ msg = "Lookup must contain key or index transforms."
|
|
|
+ with self.assertRaisesMessage(ValueError, msg):
|
|
|
+ KT("value")
|
|
|
+ with self.assertRaisesMessage(ValueError, msg):
|
|
|
+ KT("")
|