summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/db/models/fields/related.py3
-rw-r--r--tests/db_functions/comparison/test_cast.py9
2 files changed, 12 insertions, 0 deletions
diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py
index b31fee7e89..0efbe53a0b 100644
--- a/django/db/models/fields/related.py
+++ b/django/db/models/fields/related.py
@@ -1162,6 +1162,9 @@ class ForeignKey(ForeignObject):
def db_type(self, connection):
return self.target_field.rel_db_type(connection=connection)
+ def cast_db_type(self, connection):
+ return self.target_field.cast_db_type(connection=connection)
+
def db_parameters(self, connection):
target_db_parameters = self.target_field.db_parameters(connection)
return {
diff --git a/tests/db_functions/comparison/test_cast.py b/tests/db_functions/comparison/test_cast.py
index afb6b473b9..80375cc389 100644
--- a/tests/db_functions/comparison/test_cast.py
+++ b/tests/db_functions/comparison/test_cast.py
@@ -76,6 +76,15 @@ class CastTests(TestCase):
numbers = Author.objects.annotate(cast_int=Cast("alias", field_class()))
self.assertEqual(numbers.get().cast_int, 1)
+ def test_cast_to_integer_foreign_key(self):
+ numbers = Author.objects.annotate(
+ cast_fk=Cast(
+ models.Value("0"),
+ models.ForeignKey(Author, on_delete=models.SET_NULL),
+ )
+ )
+ self.assertEqual(numbers.get().cast_fk, 0)
+
def test_cast_to_duration(self):
duration = datetime.timedelta(days=1, seconds=2, microseconds=3)
DTModel.objects.create(duration=duration)