diff options
-rw-r--r-- | django/db/models/fields/related.py | 3 | ||||
-rw-r--r-- | tests/db_functions/comparison/test_cast.py | 9 |
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) |