mirror of
https://github.com/django/django.git
synced 2025-10-27 23:56:08 +00:00
Fixed #17838 - prefetch_related fails for GenericForeignKeys when related object id is not a CharField/TextField
Thanks to mkai for the report and debugging, and tmitchell and Przemek Lewandowski for their work on the patch. git-svn-id: http://code.djangoproject.com/svn/django/trunk@17744 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
@@ -85,16 +85,16 @@ class GenericForeignKey(object):
|
||||
ret_val.extend(ct.get_all_objects_for_this_type(pk__in=fkeys))
|
||||
|
||||
# For doing the join in Python, we have to match both the FK val and the
|
||||
# content type, so the 'attr' vals we return need to be callables that
|
||||
# will return a (fk, class) pair.
|
||||
# content type, so we use a callable that returns a (fk, class) pair.
|
||||
def gfk_key(obj):
|
||||
ct_id = getattr(obj, ct_attname)
|
||||
if ct_id is None:
|
||||
return None
|
||||
else:
|
||||
return (getattr(obj, self.fk_field),
|
||||
self.get_content_type(id=ct_id,
|
||||
using=obj._state.db).model_class())
|
||||
model = self.get_content_type(id=ct_id,
|
||||
using=obj._state.db).model_class()
|
||||
return (model._meta.pk.get_prep_value(getattr(obj, self.fk_field)),
|
||||
model)
|
||||
|
||||
return (ret_val,
|
||||
lambda obj: (obj._get_pk_val(), obj.__class__),
|
||||
|
||||
Reference in New Issue
Block a user