summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMariusz Felisiak <felisiak.mariusz@gmail.com>2026-06-09 13:12:29 +0200
committerGitHub <noreply@github.com>2026-06-09 13:12:29 +0200
commit71af23d1f4678c4bf052e051d72e8928e1697de3 (patch)
tree6d259bccc66bfa944a17b30cdcc3199bd105c021
parent526b1b414d8e215bf627b5722df12a09346dbf6b (diff)
Fixed #37147 -- Fixed rendering empty values for models with db_default on primary key.
-rw-r--r--django/forms/widgets.py9
-rw-r--r--tests/forms_tests/widget_tests/test_widget.py3
2 files changed, 11 insertions, 1 deletions
diff --git a/django/forms/widgets.py b/django/forms/widgets.py
index f401896b60..56ff7bb5ad 100644
--- a/django/forms/widgets.py
+++ b/django/forms/widgets.py
@@ -343,7 +343,14 @@ class Widget(metaclass=MediaDefiningClass):
"""
Return a value as it should appear when rendered in a template.
"""
- if value == "" or value is None:
+ from django.db.models.expressions import DatabaseDefault
+
+ if (
+ value == ""
+ or value is None
+ # Empty value when db_default is used.
+ or isinstance(value, DatabaseDefault)
+ ):
return None
if self.is_localized:
return formats.localize_input(value)
diff --git a/tests/forms_tests/widget_tests/test_widget.py b/tests/forms_tests/widget_tests/test_widget.py
index 9e243570d7..32e5e38f59 100644
--- a/tests/forms_tests/widget_tests/test_widget.py
+++ b/tests/forms_tests/widget_tests/test_widget.py
@@ -1,3 +1,5 @@
+from django.db.models import Value
+from django.db.models.expressions import DatabaseDefault
from django.forms import Widget
from django.forms.widgets import Input
@@ -9,6 +11,7 @@ class WidgetTests(WidgetTest):
widget = Widget()
self.assertIsNone(widget.format_value(None))
self.assertIsNone(widget.format_value(""))
+ self.assertIsNone(widget.format_value(DatabaseDefault(Value("1"))))
self.assertEqual(widget.format_value("español"), "español")
self.assertEqual(widget.format_value(42.5), "42.5")