Opened 4 years ago

Closed 3 years ago

#26763 closed New feature (fixed)

Control rendering of add/change/delete_related admin buttons

Reported by: Chris Clark Owned by: Chris Clark
Component: contrib.admin Version: 1.9
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: yes
Needs tests: yes Patch needs improvement: no
Easy pickings: no UI/UX: yes

Description (last modified by Chris Clark)

In certain cases, displaying the add/change/delete icons on related fields in the Django admin is undesirable, but this behavior can't currently be overridden. The proposed change allows configuration of which buttons to display by passing kwargs into formfield_for_db.

Attachments (2)

Screen Shot 2016-06-15 at 9.42.18 AM.png (4.9 KB) - added by Chris Clark 4 years ago.
Screenshot of feature in question
example.jpg (49.3 KB) - added by Chris Clark 4 years ago.
Example of ambiguous UI

Download all attachments as: .zip

Change History (9)

comment:1 Changed 4 years ago by Chris Clark

Description: modified (diff)
Needs documentation: set
Needs tests: set
Owner: changed from nobody to Chris Clark
Status: newassigned

Changed 4 years ago by Chris Clark

Screenshot of feature in question

comment:2 Changed 4 years ago by Tim Graham

Could you add some specifics about the use case? I'll admit I'm a bit fatigued about adding endless options in the admin to provide infinite customization.

Changed 4 years ago by Chris Clark

Attachment: example.jpg added

Example of ambiguous UI

comment:3 Changed 4 years ago by Chris Clark

For sure (and I hear you!). Essentially, the UI can be *incredibly* confusing in certain circumstances so we need to disable it.

Here's a very concrete example:

I've attached a screen shot from our Django admin site. We're an ecommerce company, and this is a customer's shipment with a "12% off" offer applied to it (the last field in the screenshot).

For various reasons, sometimes we need to remove the "offer" from a shipment. Our support reps get a call from a customer, go to the shipment in the Django admin and are *supposed* to set the drop down to --empty--, and save the shipment, in order to remove the offer.

Instead, a handful of times, reps have clicked the red X in order to 'remove' the offer from the shipment. A totally logical and reasonable thing to do, given the UI. But, of course, that deletes *the entire offer* from *the entire system*. The offer might be applied to hundreds, or thousands of different shipments, and disaster ensues.

The irony here is that, for safety, we have the FK field from Shipment -> Offer set as on_delete=set_null because god forbid deleting an offer also deleted all of the shipments. But set_null has the perverse side effect of actually ENABLING this X button; it's hidden in the presence of on_delete=cascade. Hah! (and there are other, valid, reasons to delete offers, and we would never want to delete shipments, so setting on_delete=cascade is not a solution for us here).

This type of UI confusion around these buttons occurs in a dozen or so spots around our admin interface.

comment:4 Changed 4 years ago by Chris Clark

I think it's also notable that the widget itself is already parameterized for this functionality, it's just that it was not carried through to the wrapper, which almost, if you squint and don't think about it too hard, looks like a bug.

comment:5 Changed 4 years ago by Tim Graham

Triage Stage: UnreviewedAccepted

comment:6 Changed 4 years ago by Tim Graham

Easy pickings: unset

comment:7 Changed 3 years ago by Carlton Gibson

Resolution: fixed
Status: assignedclosed

This was resolved by #27728, which allowed overriding admin templatetag's templates.

Note: See TracTickets for help on using tickets.
Back to Top