django-siteforms icon indicating copy to clipboard operation
django-siteforms copied to clipboard

Handle `initial` in filter form

Open idlesign opened this issue 1 year ago • 0 comments

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)

idlesign avatar Nov 30 '23 04:11 idlesign