summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbhaya Agarwal <abhaya@instascribe.com>2015-05-13 02:34:56 +0530
committerTim Graham <timograham@gmail.com>2015-05-12 19:37:37 -0400
commit290c9d665490d80b0a1b648fb022190d7dc375fc (patch)
tree36f312d9666a7620efd50493b07538aed536121e
parent3ad1074cf9863796ecb5c34bcb84043110f572d3 (diff)
[1.8.x] Fixed #24698, #24712 -- Added ForeignKey.get_db_prep_value()
Fixed crashes with ForeignKey to UUIDField and inheritance with UUIDField primary keys.
-rw-r--r--django/db/models/fields/related.py3
-rw-r--r--docs/releases/1.8.2.txt5
-rw-r--r--tests/model_fields/models.py8
-rw-r--r--tests/model_fields/test_uuid.py7
4 files changed, 22 insertions, 1 deletions
diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py
index a499fef136..6fa46954e0 100644
--- a/django/db/models/fields/related.py
+++ b/django/db/models/fields/related.py
@@ -1939,6 +1939,9 @@ class ForeignKey(ForeignObject):
else:
return self.related_field.get_db_prep_save(value, connection=connection)
+ def get_db_prep_value(self, value, connection, prepared=False):
+ return self.related_field.get_db_prep_value(value, connection, prepared)
+
def value_to_string(self, obj):
if not obj:
# In required many-to-one fields with only one available choice,
diff --git a/docs/releases/1.8.2.txt b/docs/releases/1.8.2.txt
index bf54aeefd4..457dac4034 100644
--- a/docs/releases/1.8.2.txt
+++ b/docs/releases/1.8.2.txt
@@ -20,3 +20,8 @@ Bugfixes
* Fixed incorrect GROUP BY clause generation on MySQL when the query's model
has a self-referential foreign key (:ticket:`24748`).
+
+* Implemented ``ForeignKey.get_db_prep_value()`` so that ``ForeignKey``\s
+ pointing to :class:`~django.db.models.UUIDField` and inheritance on models
+ with ``UUIDField`` primary keys work correctly (:ticket:`24698`,
+ :ticket:`24712`).
diff --git a/tests/model_fields/models.py b/tests/model_fields/models.py
index 620fa9ec5d..2141610b0e 100644
--- a/tests/model_fields/models.py
+++ b/tests/model_fields/models.py
@@ -375,3 +375,11 @@ class PrimaryKeyUUIDModel(models.Model):
class RelatedToUUIDModel(models.Model):
uuid_fk = models.ForeignKey('PrimaryKeyUUIDModel')
+
+
+class UUIDChild(PrimaryKeyUUIDModel):
+ pass
+
+
+class UUIDGrandchild(UUIDChild):
+ pass
diff --git a/tests/model_fields/test_uuid.py b/tests/model_fields/test_uuid.py
index 7ce98a0852..21c2869edf 100644
--- a/tests/model_fields/test_uuid.py
+++ b/tests/model_fields/test_uuid.py
@@ -6,7 +6,8 @@ from django.db import models
from django.test import TestCase
from .models import (
- NullableUUIDModel, PrimaryKeyUUIDModel, RelatedToUUIDModel, UUIDModel,
+ NullableUUIDModel, PrimaryKeyUUIDModel, RelatedToUUIDModel, UUIDGrandchild,
+ UUIDModel,
)
@@ -146,3 +147,7 @@ class TestAsPrimaryKey(TestCase):
RelatedToUUIDModel.objects.update(uuid_fk=u2.pk)
r.refresh_from_db()
self.assertEqual(r.uuid_fk, u2)
+
+ def test_two_level_foreign_keys(self):
+ # exercises ForeignKey.get_db_prep_value()
+ UUIDGrandchild().save()