diff options
| author | David Sanders <> | 2024-04-21 16:46:26 +1000 |
|---|---|---|
| committer | Sarah Boyce <42296566+sarahboyce@users.noreply.github.com> | 2024-05-02 19:05:13 +0200 |
| commit | 97d48cd3c6f409584b5cc19fbddfca917bae78fd (patch) | |
| tree | 9daa51c1a9914b6ee81d213826bbd52b338d12a0 /tests/queries | |
| parent | 39828fa7786a805f7a542abb929f352d3c5b722c (diff) | |
Refs #34007, Refs #35359 -- Added Q.referenced_based_fields property.
Thank you to Mariusz Felisiak and Natalia Bidart for the reviews.
Diffstat (limited to 'tests/queries')
| -rw-r--r-- | tests/queries/test_q.py | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/queries/test_q.py b/tests/queries/test_q.py index d3bab1f2a0..f7192a430a 100644 --- a/tests/queries/test_q.py +++ b/tests/queries/test_q.py @@ -10,6 +10,7 @@ from django.db.models import ( ) from django.db.models.expressions import NegatedExpression, RawSQL from django.db.models.functions import Lower +from django.db.models.lookups import Exact, IsNull from django.db.models.sql.where import NothingNode from django.test import SimpleTestCase, TestCase @@ -263,6 +264,33 @@ class QTests(SimpleTestCase): Q(*items, _connector=connector), ) + def test_referenced_base_fields(self): + # Make sure Q.referenced_base_fields retrieves all base fields from + # both filters and F expressions. + tests = [ + (Q(field_1=1) & Q(field_2=1), {"field_1", "field_2"}), + ( + Q(Exact(F("field_3"), IsNull(F("field_4"), True))), + {"field_3", "field_4"}, + ), + (Q(Exact(Q(field_5=F("field_6")), True)), {"field_5", "field_6"}), + (Q(field_2=1), {"field_2"}), + (Q(field_7__lookup=True), {"field_7"}), + (Q(field_7__joined_field__lookup=True), {"field_7"}), + ] + combined_q = Q(1) + combined_q_base_fields = set() + for q, expected_base_fields in tests: + combined_q &= q + combined_q_base_fields |= expected_base_fields + tests.append((combined_q, combined_q_base_fields)) + for q, expected_base_fields in tests: + with self.subTest(q=q): + self.assertEqual( + q.referenced_base_fields, + expected_base_fields, + ) + class QCheckTests(TestCase): def test_basic(self): |
