diff options
| author | Paolo Melchiorre <paolo@melchiorre.org> | 2023-09-13 22:11:08 +0200 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2023-09-14 21:17:12 +0200 |
| commit | 68d769e691eb0d765228defddb3ba982eabdc761 (patch) | |
| tree | 51410c961f6d24b4871e52192d753fcc43d2cc1f /tests/model_fields | |
| parent | 969ecb8236f033d183108fb28849974da188da50 (diff) | |
Fixed #34838 -- Corrected output_field of resolved columns for GeneratedFields.
Thanks Simon Charette for the implementation idea.
Diffstat (limited to 'tests/model_fields')
| -rw-r--r-- | tests/model_fields/test_generatedfield.py | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/tests/model_fields/test_generatedfield.py b/tests/model_fields/test_generatedfield.py index e2746bdd0c..dec1f3a31f 100644 --- a/tests/model_fields/test_generatedfield.py +++ b/tests/model_fields/test_generatedfield.py @@ -1,6 +1,6 @@ from django.core.exceptions import FieldError from django.db import IntegrityError, connection -from django.db.models import F, GeneratedField, IntegerField +from django.db.models import F, FloatField, GeneratedField, IntegerField, Model from django.db.models.functions import Lower from django.test import SimpleTestCase, TestCase, skipUnlessDBFeature @@ -49,6 +49,40 @@ class BaseGeneratedFieldTests(SimpleTestCase): self.assertEqual(args, []) self.assertEqual(kwargs, {"db_persist": True, "expression": F("a") + F("b")}) + def test_get_col(self): + class Square(Model): + side = IntegerField() + area = GeneratedField(expression=F("side") * F("side"), db_persist=True) + + col = Square._meta.get_field("area").get_col("alias") + self.assertIsInstance(col.output_field, IntegerField) + + class FloatSquare(Model): + side = IntegerField() + area = GeneratedField( + expression=F("side") * F("side"), + db_persist=True, + output_field=FloatField(), + ) + + col = FloatSquare._meta.get_field("area").get_col("alias") + self.assertIsInstance(col.output_field, FloatField) + + def test_cached_col(self): + class Sum(Model): + a = IntegerField() + b = IntegerField() + total = GeneratedField(expression=F("a") + F("b"), db_persist=True) + + field = Sum._meta.get_field("total") + cached_col = field.cached_col + self.assertIs(field.get_col(Sum._meta.db_table), cached_col) + self.assertIs(field.get_col(Sum._meta.db_table, field), cached_col) + self.assertIsNot(field.get_col("alias"), cached_col) + self.assertIsNot(field.get_col(Sum._meta.db_table, IntegerField()), cached_col) + self.assertIs(cached_col.target, field) + self.assertIsInstance(cached_col.output_field, IntegerField) + class GeneratedFieldTestMixin: def _refresh_if_needed(self, m): |
