#23167: BaseForm lacks a useful repr -----------------------------------------+-------------------- Reporter: Keryn Knight <django@…> | Owner: nobody Type: New feature | Status: new Component: Forms | Version: master Severity: Normal | Keywords: Triage Stage: Unreviewed | Has patch: 0 Easy pickings: 0 | UI/UX: 0 -----------------------------------------+-------------------- 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. There've been a few tickets for repr-adding goodness (#22906, #22531, #19543) so I'm assuming that providing a richer REPL experience in general means there may be merit to this ticket. -- Ticket URL: <https://code.djangoproject.com/ticket/23167> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To post to this group, send email to django-updates@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/080.6c1aed8501e4765b9e1077593cd52ca6%40djangoproject.com. For more options, visit https://groups.google.com/d/optout.