#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 [email protected].
To post to this group, send email to [email protected].
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.

Reply via email to