summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorPaolo Melchiorre <paolo@melchiorre.org>2023-09-13 22:11:08 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2023-09-14 21:17:12 +0200
commit68d769e691eb0d765228defddb3ba982eabdc761 (patch)
tree51410c961f6d24b4871e52192d753fcc43d2cc1f /django
parent969ecb8236f033d183108fb28849974da188da50 (diff)
Fixed #34838 -- Corrected output_field of resolved columns for GeneratedFields.
Thanks Simon Charette for the implementation idea.
Diffstat (limited to 'django')
-rw-r--r--django/db/models/fields/generated.py12
1 files changed, 12 insertions, 0 deletions
diff --git a/django/db/models/fields/generated.py b/django/db/models/fields/generated.py
index 0980be98af..deb5875638 100644
--- a/django/db/models/fields/generated.py
+++ b/django/db/models/fields/generated.py
@@ -1,6 +1,7 @@
from django.core import checks
from django.db import connections, router
from django.db.models.sql import Query
+from django.utils.functional import cached_property
from . import NOT_PROVIDED, Field
@@ -32,6 +33,17 @@ class GeneratedField(Field):
self.db_persist = db_persist
super().__init__(**kwargs)
+ @cached_property
+ def cached_col(self):
+ from django.db.models.expressions import Col
+
+ return Col(self.model._meta.db_table, self, self.output_field)
+
+ def get_col(self, alias, output_field=None):
+ if alias != self.model._meta.db_table and output_field is None:
+ output_field = self.output_field
+ return super().get_col(alias, output_field)
+
def contribute_to_class(self, *args, **kwargs):
super().contribute_to_class(*args, **kwargs)