Hi all, I was looking at the code for `forms.Form` recently and noticed that there are a couple of hooks[1] to add CSS classes to required or erroneous forms.
However, the `BaseForm` does not have a class level initialisation of these. The classes are then later added via a `hasattr` check. I opened this as a ticket [2] and it was triaged as a duplicate of a ticket from 11 years ago [3]. At that time it was closed due to it not considered 'worth setting' along with concerns about backward compatibility. Going back a bit further in time the proposed patch did include placeholders (as `None`) but for reasons I can't quite tell they we're not included in the merged version of the patch. Significant time has passed since the decision was made and I'm interested in what _best practice_ is _these days_. I think Carlton nicely summarised the spectrum here on one hand "auto-complete and type checkers much prefer attributes to be defined (as None?) rather than injected later" on the other there is a need to avoid "litter class definitions and/or init methods with None declaration (Better the tooling gets cleverer.)". I've created a sample patch[5] and shown the extra help a modern IDE (Pycharm in this case) can provide if the variable is initalised as `None` at the class level. I also like that `hasattr(self.form, 'required_css_class')` can become `s elf.form.required_css_class`. This change passes the test suite, so I'm unsure what the previous concerns about backwards compatibility are, likely I'm missing something. So ultimatly I think the question is that if after all this time could we reopen ticket #14322 [3] Appreciate thoughts on this, if only to help me understand API design better! Kind Regards David 1 https://docs.djangoproject.com/en/3.2/ref/forms/api/#styling-required-or-erroneous-form-rows 2 https://code.djangoproject.com/ticket/33226 3 https://code.djangoproject.com/ticket/14322 4 https://code.djangoproject.com/ticket/3512#comment:30 5 https://gist.github.com/smithdc1/65605c52f05bd39bf43fed67962b7ece -- You received this message because you are subscribed to the Google Groups "Django developers (Contributions to Django itself)" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-developers+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-developers/680a9646-11fc-47c6-ac0d-200a0f9bdc54n%40googlegroups.com.