diff options
| author | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2026-06-09 13:12:29 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-06-09 13:12:29 +0200 |
| commit | 71af23d1f4678c4bf052e051d72e8928e1697de3 (patch) | |
| tree | 6d259bccc66bfa944a17b30cdcc3199bd105c021 | |
| parent | 526b1b414d8e215bf627b5722df12a09346dbf6b (diff) | |
Fixed #37147 -- Fixed rendering empty values for models with db_default on primary key.
| -rw-r--r-- | django/forms/widgets.py | 9 | ||||
| -rw-r--r-- | tests/forms_tests/widget_tests/test_widget.py | 3 |
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") |
