summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVinny Do <vdo.code@gmail.com>2019-04-16 17:49:16 +1000
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2019-04-16 09:49:16 +0200
commita4055adf702d086334a9ab2ca25a5e41e896a4fb (patch)
tree42dc2a71daf25b37169c8a0163c194659e7290ce
parentd610521bffe9d44a070ebe3a719b474aff6d3d1e (diff)
downloaddjango-a4055adf702d086334a9ab2ca25a5e41e896a4fb.tar.gz
Fixed #30368 -- Fixed prefetch_related() for GenericForeignKey when PK is also a FK.
-rw-r--r--AUTHORS1
-rw-r--r--django/db/models/fields/related.py3
-rw-r--r--tests/prefetch_related/tests.py7
3 files changed, 11 insertions, 0 deletions
diff --git a/AUTHORS b/AUTHORS
index 96d0696dd1..0557c343db 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -880,6 +880,7 @@ answer newbie questions, and generally made Django that much better:
Vinay Karanam <https://github.com/vinayinvicible>
Vinay Sajip <vinay_sajip@yahoo.co.uk>
Vincent Foley <vfoleybourgon@yahoo.ca>
+ Vinny Do <vdo.code@gmail.com>
Vitaly Babiy <vbabiy86@gmail.com>
Vladimir Kuzma <vladimirkuzma.ch@gmail.com>
Vlado <vlado@labath.org>
diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py
index eda09c2ebe..2eb802e570 100644
--- a/django/db/models/fields/related.py
+++ b/django/db/models/fields/related.py
@@ -939,6 +939,9 @@ class ForeignKey(ForeignObject):
def get_db_prep_value(self, value, connection, prepared=False):
return self.target_field.get_db_prep_value(value, connection, prepared)
+ def get_prep_value(self, value):
+ return self.target_field.get_prep_value(value)
+
def contribute_to_related_class(self, cls, related):
super().contribute_to_related_class(cls, related)
if self.remote_field.field_name is None:
diff --git a/tests/prefetch_related/tests.py b/tests/prefetch_related/tests.py
index a32ac81d12..0b3caed0dc 100644
--- a/tests/prefetch_related/tests.py
+++ b/tests/prefetch_related/tests.py
@@ -891,6 +891,13 @@ class GenericRelationTests(TestCase):
qs = Comment.objects.prefetch_related('content_object_uuid')
self.assertEqual([c.content_object_uuid for c in qs], [article])
+ def test_prefetch_GFK_fk_pk(self):
+ book = Book.objects.create(title='Poems')
+ book_with_year = BookWithYear.objects.create(book=book, published_year=2019)
+ Comment.objects.create(comment='awesome', content_object=book_with_year)
+ qs = Comment.objects.prefetch_related('content_object')
+ self.assertEqual([c.content_object for c in qs], [book_with_year])
+
def test_traverse_GFK(self):
"""
A 'content_object' can be traversed with prefetch_related() and