BaseForm lacks a useful repr
|Reported by:||Owned by:||nobody|
|Cc:||Areski Belaid||Triage Stage:||Accepted|
|Has patch:||yes||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||no|
Currently, form instances have a useful
__str__ which renders them out as a table, but the
__repr__ (or lack thereof) for them is the same old unhelpful
<module.FormName at 0xDEADBEEF> which all Python classes get by default.
It would be more useful to those of us who live in pdb/repl (and debug-toolbar template contexts -- which use
pprint.pformat for rendering values, which internally uses
saferepr, which as you might expect, eventually calls
repr(x)) if the repr had some info about the form itself.
Off the top of my head, is_bound, field names, valid state would be a reasonable representation of the form, such that you get something like
<module.FormName is_bound=True, is_valid=False, fields=('a', 'b', 'c')>
A slight complication is that the is_valid bool couldn't be obtained via
is_valid because that triggers validation -- it would instead need to be
is_bound and not self._errors or something (I'm assuming ErrorDict returns truthy/falsy the same as dict does)
Further, the field names ought to come from the keys of
self.fields rather than
base_fields, as the former is instance specific and often gets modified.
One could also make the case for adding
has_changed into the repr, but in my experience, it's a lesser-used piece of the API; ditto the prefix.