Skip to content

Commit fe95e25

Browse files
committed
fix(forms): Render hidden initial field values
1 parent b02c096 commit fe95e25

2 files changed

Lines changed: 46 additions & 3 deletions

File tree

src/django_smartbase_admin/templatetags/sb_admin_tags.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,13 @@ def render_widget(widget, request):
148148
return widget.render(request)
149149

150150

151+
def _render_with_hidden_initial(form_field, attrs=None):
152+
rendered = form_field.as_widget(attrs=attrs)
153+
if form_field.field.show_hidden_initial:
154+
rendered += form_field.as_hidden(only_initial=True)
155+
return rendered
156+
157+
151158
@register.simple_tag(takes_context=True)
152159
def sb_admin_render_form_field(context, form_field, label_as_placeholder=False):
153160
request = context["request"]
@@ -159,12 +166,12 @@ def sb_admin_render_form_field(context, form_field, label_as_placeholder=False):
159166
if label_as_placeholder:
160167
form_field.field.widget.attrs["placeholder"] = form_field.field.label
161168
form_field.field.label = None
162-
return form_field.as_widget()
169+
return _render_with_hidden_initial(form_field)
163170

164171

165172
@register.simple_tag
166173
def sb_admin_render_inline_table_field(form_field):
167-
return form_field.as_widget(attrs={"sbadmin_hide_label": True})
174+
return _render_with_hidden_initial(form_field, attrs={"sbadmin_hide_label": True})
168175

169176

170177
@register.simple_tag

src/django_smartbase_admin/tests/test_inline_table_field_rendering.py

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from django import forms
22
from django.db import models
33
from django.template import Context, Template
4-
from django.test import SimpleTestCase
4+
from django.test import RequestFactory, SimpleTestCase
55

66
from django_smartbase_admin.admin.site import sb_admin_site
77
from django_smartbase_admin.monkeypatch.admin_readonly_field_monkeypatch import (
@@ -85,6 +85,42 @@ class ExampleForm(forms.Form):
8585
self.assertIn("Enabled", html)
8686
self.assertNotIn("sbadmin_hide_label", html)
8787

88+
def test_inline_table_field_renders_hidden_initial(self):
89+
class ExampleForm(forms.Form):
90+
field = forms.CharField(
91+
initial=lambda: "initial value",
92+
show_hidden_initial=True,
93+
)
94+
95+
html = self.render_inline_table_field(ExampleForm())
96+
97+
self.assertIn('name="field"', html)
98+
self.assertIn('type="hidden"', html)
99+
self.assertIn('name="initial-field"', html)
100+
101+
def test_form_field_renders_hidden_initial(self):
102+
class ExampleForm(forms.Form):
103+
field = forms.CharField(
104+
initial=lambda: "initial value",
105+
show_hidden_initial=True,
106+
)
107+
108+
template = Template(
109+
"{% load sb_admin_tags %}{% sb_admin_render_form_field form.field %}"
110+
)
111+
html = template.render(
112+
Context(
113+
{
114+
"form": ExampleForm(),
115+
"request": RequestFactory().get("/"),
116+
}
117+
)
118+
)
119+
120+
self.assertIn('name="field"', html)
121+
self.assertIn('type="hidden"', html)
122+
self.assertIn('name="initial-field"', html)
123+
88124
def test_inline_table_readonly_field_hides_own_label(self):
89125
form = InlineReadonlyDemoForm(
90126
instance=InlineReadonlyDemoModel(name="Saved name")

0 commit comments

Comments
 (0)