Opened 7 years ago

Closed 7 years ago

Last modified 5 years ago

#12692 closed (fixed)

Wrong interpretation of extra clause in ModelAdmin with new admin UI

Reported by: Florian Apolloner Owned by: Jannis Leidel
Component: Contrib apps Version: master
Severity: Keywords: admin, js, inlines
Cc: Jannis Leidel, Florian Apolloner Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: UI/UX:

Description (last modified by Russell Keith-Magee)

In the current admin you can specify max_num and extra for inlines. Before r12297 this meant that you would get the current data from the database + extra as long as it stays below max_num. If you were still below max_num you had to save the page to get extra new fields (this could be repeated until you reached the limit). This behaviour is currently implemented with the js too; but I think (as js is a usability enchancement) you should be able to add as many rows until you reach max_num not TOTAL-FORMS (which is rows+extra while <= max_num). To get this working I guess we would need to pass max_num to the js so it can decide when to stop.


An alternate description from #12704:

The new javascript-enabled admin UI appears have an unusual interpretation of the 'extra' clause on a ModelAdmin?.

The current code interprets 'extra = N' as "allow the user to add no more than N extra rows. The user must press (+ add another XXX) to add the first inline.

I would have thought the interpretation would have been "instantiate the form with with N empty extra rows". The task of constraining the number of allowed inlines is the job of the 'max_num' clause.

The admin UI should always show N blank inputs (for extra = N), as long as that wouldn't exceed the max_num. The user should be able to fill in up to N inlines before needing to press the (+ add another) button.

If I'm incorrect, then the second failing test reported by #12703 needs to be fixed by accounting for the 5 fields (and missing default date) that are no longer on the form.

Attachments (3)

12692.1.diff (5.5 KB) - added by Jannis Leidel 7 years ago.
Updated inline code to be more useful wrt the maximal number of items. A max_num of 0 means infinite additions.
12692.2.diff (5.3 KB) - added by Jannis Leidel 7 years ago.
A patch without console.log calls
12692.3.diff (47.5 KB) - added by Jannis Leidel 7 years ago.
Patch with Closure compiled min file and modified tests.

Download all attachments as: .zip

Change History (10)

comment:1 Changed 7 years ago by Russell Keith-Magee

Description: modified (diff)
Summary: shortcoming in the new admin inlinesWrong interpretation of extra clause in ModelAdmin with new admin UI
Triage Stage: UnreviewedDesign decision needed

#12704 was a duplicate. Updated ticket title to be more explicit.

comment:2 Changed 7 years ago by Jannis Leidel

Triage Stage: Design decision neededAccepted

comment:3 Changed 7 years ago by Jannis Leidel

Owner: changed from nobody to Jannis Leidel
Status: newassigned

Changed 7 years ago by Jannis Leidel

Attachment: 12692.1.diff added

Updated inline code to be more useful wrt the maximal number of items. A max_num of 0 means infinite additions.

Changed 7 years ago by Jannis Leidel

Attachment: 12692.2.diff added

A patch without console.log calls

Changed 7 years ago by Jannis Leidel

Attachment: 12692.3.diff added

Patch with Closure compiled min file and modified tests.

comment:4 Changed 7 years ago by Jannis Leidel

I believe the last patch fixes all of what was wrong with the "extra" implementation, now showing initial and extra forms by default, allowing to add new objects till the total number of inline forms equals max_num (or indefinitely adding new). I'm passing the max_num to the javascript as a separate form field.

comment:5 Changed 7 years ago by Jannis Leidel

Resolution: fixed
Status: assignedclosed

(In [12369]) Fixed #12692 - Properly handle the extra clause of admin inline formsets. Also fixes #12703, second error.

comment:6 Changed 7 years ago by Greg Brown

There are times when one doesn't want the users to be able to add new inlines at all - for example if they are generated on model save or at some other time, but you do want the user to be able to edit them. extra=0 used to achieve this, but it doesn't anymore.

comment:7 Changed 5 years ago by Jacob

milestone: 1.2

Milestone 1.2 deleted

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