mirror of https://github.com/django/django.git
Fixed #28047 -- Fixed QuerySet.filter() crash when it uses the name of a OneToOneField pk.
Regression in 1bc249c2a6
.
This commit is contained in:
parent
a19b373d89
commit
fce7827101
|
@ -83,7 +83,8 @@ class RelatedIn(In):
|
||||||
else:
|
else:
|
||||||
if getattr(self.rhs, '_forced_pk', False):
|
if getattr(self.rhs, '_forced_pk', False):
|
||||||
self.rhs.clear_select_clause()
|
self.rhs.clear_select_clause()
|
||||||
if getattr(self.lhs.output_field, 'primary_key', False):
|
if (getattr(self.lhs.output_field, 'primary_key', False) and
|
||||||
|
self.lhs.output_field.model == self.rhs.model):
|
||||||
# A case like Restaurant.objects.filter(place__in=restaurant_qs),
|
# A case like Restaurant.objects.filter(place__in=restaurant_qs),
|
||||||
# where place is a OneToOneField and the primary key of
|
# where place is a OneToOneField and the primary key of
|
||||||
# Restaurant.
|
# Restaurant.
|
||||||
|
|
|
@ -18,3 +18,6 @@ Bugfixes
|
||||||
|
|
||||||
* Fixed a crash when using a two-tuple in ``EmailMessage``’s ``attachments``
|
* Fixed a crash when using a two-tuple in ``EmailMessage``’s ``attachments``
|
||||||
argument (:ticket:`28042`).
|
argument (:ticket:`28042`).
|
||||||
|
|
||||||
|
* Fixed ``QuerySet.filter()`` crash when it references the name of a
|
||||||
|
``OneToOneField`` primary key (:ticket:`28047`).
|
||||||
|
|
|
@ -479,6 +479,10 @@ class OneToOneTests(TestCase):
|
||||||
pk__in=Restaurant.objects.filter(place__id=r.place.pk)
|
pk__in=Restaurant.objects.filter(place__id=r.place.pk)
|
||||||
)
|
)
|
||||||
self.assertSequenceEqual(q2, [r])
|
self.assertSequenceEqual(q2, [r])
|
||||||
|
q3 = Restaurant.objects.filter(place__in=Place.objects.all())
|
||||||
|
self.assertSequenceEqual(q3, [r])
|
||||||
|
q4 = Restaurant.objects.filter(place__in=Place.objects.filter(id=r.pk))
|
||||||
|
self.assertSequenceEqual(q4, [r])
|
||||||
|
|
||||||
def test_rel_pk_exact(self):
|
def test_rel_pk_exact(self):
|
||||||
r = Restaurant.objects.first()
|
r = Restaurant.objects.first()
|
||||||
|
|
Loading…
Reference in New Issue