BaseForm lacks a useful repr
|Reported by:||Keryn Knight <django@…>||Owned by:||nobody|
|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.
Change History (3)
comment:1 Changed 2 years ago by timo
- Needs documentation unset
- Needs tests unset
- Patch needs improvement unset
- Triage Stage changed from Unreviewed to Accepted