Opened 10 years ago

Closed 10 years ago

Last modified 9 years ago

#14303 closed (fixed)

admin inline form id attribute numbering order and uniqueness is lost

Reported by: m0nonoke Owned by: nobody
Component: contrib.admin Version: dev
Severity: Keywords: inline javascript, sprintdec2010
Cc: Triage Stage: Ready for checkin
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no


Inline forms that are added using the "Add another ..." button created by contrib/admin/media/js/inlines.js lose their id attribute ordering and uniqueness if they are deleted out of reverse order.

To demonstrate the effect take the following steps:

  1. Create an admin form eg. MyAdmin with a tabular inline form eg. MyInline.
  1. Add 3 or more inline forms using the "Add another MyInline button"
  1. The HTML for the formset looks something like <tr id="myinline_set-0" class="dynamic-myinline_ser row1"> where myinline_set is the prefix. For 4 forms the ids are therefore myinline_set-0, myinline_set-1, myinline_set-2, myinline_set-3.
  1. Delete the second form using the delete link. The ids are now myinline_set-0, myinline_set-2, myinline_set-3.
  1. Add another inline using the "Add another MyInline button". The ids now show The ids are now myinline_set-0, myinline_set-2, myinline_set-3, myinline_set-3.

It looks like the problem occurs because of the way the id is computed in contrib/admin/media/js/inlines.js.

# contrib/admin/media/js/inlines.js Line 59-62 
59 row.removeClass(options.emptyCssClass)
60    .addClass(options.formCssClass)
61    .attr("id", options.prefix + "-" + nextIndex)
62    .insertBefore($(template));

nextIndex is just the TOTAL_FORMS value of the management form plus one. The solution would involve resetting the values for all inline forms.

Attachments (1)

14303_inline_ids.diff (7.2 KB) - added by Julien Phalip 10 years ago.

Download all attachments as: .zip

Change History (8)

comment:1 Changed 10 years ago by m0nonoke

comment:2 Changed 10 years ago by Julien Phalip

Has patch: set
Keywords: sprintdec2010 added
Triage Stage: UnreviewedAccepted

I confirm this is a bug. This can be fixed by keeping nextIndex static and not refreshing it with the TOTAL_FORMS value each time. See patch attached.

Changed 10 years ago by Julien Phalip

Attachment: 14303_inline_ids.diff added

comment:3 Changed 10 years ago by Julien Phalip

See #13674 for a related (but different) bug.

comment:4 Changed 10 years ago by Julien Phalip

Triage Stage: AcceptedReady for checkin

RFC'ing my own patch but hopefully this is a simple-enough fix to allow me to do that :)

comment:5 Changed 10 years ago by Russell Keith-Magee

Resolution: fixed
Status: newclosed

In [15422]:

Fixed #14303 -- Ensure that the ids created for new inlines are unique after interstitial deletions have occurred. Thanks to m0nonoke for the report, and Julien Phalip for the patch.

comment:6 Changed 10 years ago by Russell Keith-Magee

In [15423]:

(The changeset message doesn't reference this ticket)

comment:7 Changed 9 years ago by Jacob

milestone: 1.3

Milestone 1.3 deleted

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