django-siteforms
django-siteforms copied to clipboard
Handle `initial` in filter form
Allow setting initial values for a form.
Something like:
def _initialize_pre(self, *, args, kwargs):
initial = kwargs.get('initial') or {}
if initial:
src = self.src
request = self.request
prefix = kwargs.get('prefix') or ''
if src and request and request.method == src:
databag = getattr(request, src)
databag._mutable = True # suppose QueryDict
for initial_key, initial_value in initial.items():
if prefix:
# Respect prefix if any.
initial_key = f'{prefix}-{initial_key}'
# As if our initial data was sent by a user.
if initial_key not in databag:
databag[initial_key] = initial_value
# Add a hint as if this form has been submitted by a user.
databag[self.Composer.opt_submit_name] = self.submit_marker
databag._mutable = False
super()._initialize_pre(args=args, kwargs=kwargs)