mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +00:00 
			
		
		
		
	[1.5.x] Fixed empty strings + to_field regression on Oracle
Querying the reverse side of nullable to_field relation, where both
sides can contain null values resulted in incorrect results. The reason
was not detecting '' as NULL.
Refs #17541, backpatch of 09fcb70c80.
			
			
This commit is contained in:
		| @@ -1,6 +1,6 @@ | |||||||
| from operator import attrgetter | from operator import attrgetter | ||||||
|  |  | ||||||
| from django.db import connection, router | from django.db import connection, connections, router | ||||||
| from django.db.backends import util | from django.db.backends import util | ||||||
| from django.db.models import signals, get_model | from django.db.models import signals, get_model | ||||||
| from django.db.models.fields import (AutoField, Field, IntegerField, | from django.db.models.fields import (AutoField, Field, IntegerField, | ||||||
| @@ -497,7 +497,8 @@ class ForeignRelatedObjectsDescriptor(object): | |||||||
|                 except (AttributeError, KeyError): |                 except (AttributeError, KeyError): | ||||||
|                     db = self._db or router.db_for_read(self.model, instance=self.instance) |                     db = self._db or router.db_for_read(self.model, instance=self.instance) | ||||||
|                     qs = super(RelatedManager, self).get_query_set().using(db).filter(**self.core_filters) |                     qs = super(RelatedManager, self).get_query_set().using(db).filter(**self.core_filters) | ||||||
|                     if getattr(self.instance, attname) is None: |                     val = getattr(self.instance, attname) | ||||||
|  |                     if val is None or val == '' and connections[db].features.interprets_empty_strings_as_nulls: | ||||||
|                         # We don't want to use qs.none() here, see #19652 |                         # We don't want to use qs.none() here, see #19652 | ||||||
|                         return qs.filter(pk__in=[]) |                         return qs.filter(pk__in=[]) | ||||||
|                     qs._known_related_objects = {rel_field: {self.instance.pk: self.instance}} |                     qs._known_related_objects = {rel_field: {self.instance.pk: self.instance}} | ||||||
|   | |||||||
| @@ -126,7 +126,7 @@ class ManyToOneRegressionTests(TestCase): | |||||||
|         # Now the model is saved, so we will need to execute an query. |         # Now the model is saved, so we will need to execute an query. | ||||||
|         with self.assertNumQueries(1): |         with self.assertNumQueries(1): | ||||||
|             self.assertEqual(th.child_set.count(), 0) |             self.assertEqual(th.child_set.count(), 0) | ||||||
|      |  | ||||||
|     def test_related_null_to_field(self): |     def test_related_null_to_field(self): | ||||||
|         c1 = Car.objects.create() |         c1 = Car.objects.create() | ||||||
|         c2 = Car.objects.create() |         c2 = Car.objects.create() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user