From 71af23d1f4678c4bf052e051d72e8928e1697de3 Mon Sep 17 00:00:00 2001 From: Mariusz Felisiak Date: Tue, 9 Jun 2026 13:12:29 +0200 Subject: [PATCH] Fixed #37147 -- Fixed rendering empty values for models with db_default on primary key. --- django/forms/widgets.py | 9 ++++++++- tests/forms_tests/widget_tests/test_widget.py | 3 +++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/django/forms/widgets.py b/django/forms/widgets.py index f401896b60e1..56ff7bb5add9 100644 --- a/django/forms/widgets.py +++ b/django/forms/widgets.py @@ -343,7 +343,14 @@ def format_value(self, value): """ 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 9e243570d77a..32e5e38f59dd 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 @@ def test_format_value(self): 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")