Opened 3 months ago
Closed 2 months ago
#36584 closed Cleanup/optimization (fixed)
Loosen tuple lookup check for rhs subquery field cardinality to allow selecting ForeignObject
| Reported by: | Jacob Walls | Owned by: | JaeHyuckSa |
|---|---|---|---|
| Component: | Database layer (models, ORM) | Version: | dev |
| Severity: | Normal | Keywords: | CompositePrimaryKey |
| Cc: | Triage Stage: | Ready for checkin | |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
As of the fix for #36431, values("user") where "user" is a multi-column ForeignObject now resolves to a Tuple, which means we can relax the cardinality check for lookups such as TupleIn (introduced in #36149) to get this test case passing:
-
tests/composite_pk/test_filter.py
diff --git a/tests/composite_pk/test_filter.py b/tests/composite_pk/test_filter.py index d7ecfbec11..c4b393d6ea 100644
a b class CompositePKFilterTests(TestCase): 460 460 queryset = User.objects.filter(comments__in=subquery) 461 461 self.assertSequenceEqual(queryset, (self.user_2,)) 462 462 463 def test_filter_comments_by_users_subquery(self): 464 subquery = Comment.objects.filter(id=3).values("user") 465 queryset = Comment.objects.filter(user__in=subquery) 466 self.assertSequenceEqual(queryset, (self.comment_3,)) 467 463 468 def test_cannot_cast_pk(self): 464 469 msg = "Cast expression does not support composite primary keys." 465 470 with self.assertRaisesMessage(ValueError, msg):
Currently this gives:
File "/Users/jwalls/django/django/db/models/fields/related_lookups.py", line 84, in get_prep_lookup return super().get_prep_lookup() ~~~~~~~~~~~~~~~~~~~~~~~^^ File "/Users/jwalls/django/django/db/models/lookups.py", line 509, in get_prep_lookup raise ValueError( ...<2 lines>... ) ValueError: The QuerySet value for the 'in' lookup must have 2 selected fields (received 1) ----------------------------------------------------------------------
Indeed, commenting out that ValueError allows this test to pass with the fix for #36431, so there should be way to adjust this guard.
Change History (6)
comment:1 by , 3 months ago
| Keywords: | CompositePrimaryKey added |
|---|
comment:2 by , 3 months ago
| Owner: | set to |
|---|---|
| Status: | new → assigned |
comment:3 by , 3 months ago
| Has patch: | set |
|---|
comment:4 by , 3 months ago
| Triage Stage: | Unreviewed → Accepted |
|---|
comment:5 by , 2 months ago
| Triage Stage: | Accepted → Ready for checkin |
|---|
Note:
See TracTickets
for help on using tickets.
Thank you Jacob for the details!