1
0
mirror of https://github.com/django/django.git synced 2025-10-24 14:16:09 +00:00

Fixed #19299 -- Fixed Nullification of Foreign Keys To CharFields

Thanks tunixman for the report and Baptiste Mispelon and
Shai Berger for reviews.
This commit is contained in:
Albert Wang
2013-09-29 15:56:04 -04:00
committed by Tim Graham
parent 4d4e0ea461
commit 8bbdcc76e4
5 changed files with 32 additions and 7 deletions

View File

@@ -1692,11 +1692,12 @@ class ForeignKey(ForeignObject):
return field_default
def get_db_prep_save(self, value, connection):
if value == '' or value is None:
if value is None or (value == '' and
(not self.related_field.empty_strings_allowed or
connection.features.interprets_empty_strings_as_nulls)):
return None
else:
return self.related_field.get_db_prep_save(value,
connection=connection)
return self.related_field.get_db_prep_save(value, connection=connection)
def value_to_string(self, obj):
if not obj:

View File

@@ -1416,9 +1416,12 @@ def get_cached_row(row, index_start, using, klass_info, offset=0,
klass, field_names, field_count, related_fields, reverse_related_fields, pk_idx = klass_info
fields = row[index_start:index_start + field_count]
# If the pk column is None (or the Oracle equivalent ''), then the related
# If the pk column is None (or the equivalent '' in the case the
# connection interprets empty strings as nulls), then the related
# object must be non-existent - set the relation to None.
if fields[pk_idx] is None or fields[pk_idx] == '':
if (fields[pk_idx] is None or
(connections[using].features.interprets_empty_strings_as_nulls and
fields[pk_idx] == '')):
obj = None
elif field_names:
fields = list(fields)