Opened 5 years ago

Closed 5 years ago

#17325 closed New feature (wontfix)

Add **kwargs to is_valid and several validation methods

Reported by: jorgeecardona Owned by: nobody
Component: Forms Version: 1.3
Severity: Normal Keywords:
Cc: Triage Stage: Design decision needed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Aymeric Augustin)

I like to use forms a lot, but sometimes I have to overwrite __init__ to accept some parameters that change the behaviour of the validation, I was thinking that maybe is better just to add a way to pass some data to the validation methods of the form in order to validate it.

Imagine that I want to create a form to change the email of an user and I don't want to use an argument in the request for "username" and use the username from the session framework (I just want to avoid to send the username in the request), I will have to overwrite the __init__ of the form in order to accept "user" as an argument and store it in self.user to be used later in clean_email. Instead, if we have this new argument in is_valid is just to do: form.is_valid(user=user).

This new argument doesn't hurt anyone, and It will help a lot to some of us that use form in this way.

Change History (3)

comment:1 Changed 5 years ago by Aymeric Augustin

Description: modified (diff)

comment:2 Changed 5 years ago by Aymeric Augustin

Component: UncategorizedForms
Triage Stage: UnreviewedDesign decision needed

If I understand correctly, you'd want Form.is_valid to accept any keyword arguments and pass them to Form.full_clean.

I'm not convinced it's a good idea, because it's implicit, while passing arguments to the constructor is explicit — everything is visible in your Form subclass.

Furthermore, that would be difficult to achieve with the current implementation: Form.is_valid accesses the property Form.errors, which triggers the call to Form.full_clean. But you can't pass arguments to a property. So it isn't obvious that this change can be done without breaking backwards compatibility.

comment:3 Changed 5 years ago by Alex Gaynor

Resolution: wontfix
Status: newclosed

I'm wontfixing this, adding extra data to a form is properly done in __init__ as aaugustin notes, it's not even possible with the data path presently in place to do what this ticket suggests.

Note: See TracTickets for help on using tickets.
Back to Top