From e2296e7f0acf9c50868ab997ba565c1f47beb45b Mon Sep 17 00:00:00 2001 From: Tim Graham Date: Sat, 28 May 2016 09:14:02 -0400 Subject: Fixed #26667 -- Fixed a regression in queries on a OneToOneField that has to_field and primary_key=True. Thanks Simon Charette for review. --- django/db/models/fields/related_lookups.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'django') diff --git a/django/db/models/fields/related_lookups.py b/django/db/models/fields/related_lookups.py index 3123e94073..5454031c2a 100644 --- a/django/db/models/fields/related_lookups.py +++ b/django/db/models/fields/related_lookups.py @@ -24,15 +24,16 @@ def get_normalized_value(value, lhs): from django.db.models import Model if isinstance(value, Model): value_list = [] - # A case like Restaurant.objects.filter(place=restaurant_instance), - # where place is a OneToOneField and the primary key of Restaurant. - if getattr(lhs.output_field, 'primary_key', False): - return (value.pk,) sources = lhs.output_field.get_path_info()[-1].target_fields for source in sources: while not isinstance(value, source.model) and source.remote_field: source = source.remote_field.model._meta.get_field(source.remote_field.field_name) - value_list.append(getattr(value, source.attname)) + try: + value_list.append(getattr(value, source.attname)) + except AttributeError: + # A case like Restaurant.objects.filter(place=restaurant_instance), + # where place is a OneToOneField and the primary key of Restaurant. + return (value.pk,) return tuple(value_list) if not isinstance(value, tuple): return (value,) -- cgit v1.3