Opened 6 months ago

Last modified 6 weeks ago

#35521 assigned New feature

Allow overriding BoundField class on forms and fields

Reported by: Matthias Kestenholz Owned by: Christophe Henry
Component: Forms Version: 5.0
Severity: Normal Keywords:
Cc: David Smith, Oxan van Leeuwen, Christophe Henry, Carlton Gibson Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: yes
Easy pickings: no UI/UX: no

Description

It would be useful if there was an easy way to add CSS classes to the HTML element which is generated when rendering a BoundField. I propose adding field_css_class, similar to required_css_class and error_css_class. https://docs.djangoproject.com/en/5.0/ref/forms/api/#styling-required-or-erroneous-form-rows

Something like this has already been rejected in the past here: https://code.djangoproject.com/ticket/29189 . As I understand it the reason for the rejection was the upcoming templates-based form rendering and not really the feature itself. I may have missed the point though.

However, I still think there'd be some value in this even though we have templates-based renderers now. The div (in the case of the div renderer) is generated here: https://github.com/django/django/blob/main/django/forms/templates/django/forms/div.html , so it's not just about overriding django/forms/field.html if you want to avoid adding another nesting level. Also, css_classes exists and is documented.

Code-wise I propose extending the css_classes method as follows:

https://github.com/django/django/blob/e2428292abaca4758a7508175d31667fe2dff57c/django/forms/boundfield.py#L220-L231

         extra_classes = set(extra_classes or [])
+        if hasattr(self.form, "field_css_class"):
+            extra_classes.add(self.form.field_css_class)
         if self.errors and hasattr(self.form, "error_css_class"):

I'm willing to do the work if this is accepted.

Change History (7)

comment:1 by Sarah Boyce, 6 months ago

Cc: David Smith added

Hi Matthias,

Thank you for this proposal, to me this makes sense but I would like to hear David Smith's opinion here before accepting.
Generally, new features require a discussion on the Django forum to be accepted. It might be worth starting a discussion there to get feedback on the approach and see if anyone has an concerns. 👍

comment:2 by Sarah Boyce, 6 months ago

Resolution: wontfix
Status: newclosed

Read the recent discussion on the forum: https://forum.djangoproject.com/t/proposal-make-it-easy-to-add-css-classes-to-a-boundfield/32022
Will mark this ticket as wontfix for now as it sounds there are multiple approaches to consider here (including this PR https://github.com/django/django/pull/18266). Later when there is a concensus to one approach, we can either raise a new ticket or repurpose this one. Thank you for starting this discussion 👍

comment:3 by Carlton Gibson, 2 months ago

Resolution: wontfix
Status: closednew

I'd like to reopen for review again. I think there is a consensus on the thread to pursue the BoundField customisation, with any details OK to be resolved on a PR.

comment:4 by Sarah Boyce, 2 months ago

Cc: Oxan van Leeuwen Christophe Henry Carlton Gibson added
Summary: Make it easy to add CSS classes to a `BoundField`Allow overriding BoundField class on forms and fields
Triage Stage: UnreviewedAccepted

Adding folks who were cc-ed on #35192
Thank you all for the discussion

comment:5 by Christophe Henry, 2 months ago

Has patch: set

comment:6 by Sarah Boyce, 8 weeks ago

Owner: changed from nobody to Christophe Henry
Status: newassigned

comment:7 by Sarah Boyce, 6 weeks ago

Patch needs improvement: set
Note: See TracTickets for help on using tickets.
Back to Top