Opened 3 months ago

Closed 3 months ago

#36468 closed Bug (worksforme)

Popup stays blank after adding a related object when filter_horizontal is used

Reported by: Juan Rocha Owned by:
Component: contrib.admin Version: 5.2
Severity: Normal Keywords: filter_horizontal; SelectBox; add_to_cache;
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Juan Rocha)

When using the "Add another" popup for a *ForeignKey field* in the Django admin and the same ModelAdmin has a ManyToManyField with *filter_horizontal*, the popup window does not close properly after adding the related object.

Instead, the popup remains open and white (blank), and the browser console throws the following error:

:8000/static/admin/js/SelectBox.js:60 Uncaught TypeError: Cannot read properties of undefined (reading 'push')
    at Object.add_to_cache (:8000/static/admin/js/SelectBox.js:60:33)
    at :8000/static/admin/j…ctLookups.js:115:31
    at NodeList.forEach (<anonymous>)
    at updateRelatedSelectsOptions (:8000/static/admin/j…ctLookups.js:103:24)
    at dismissAddRelatedObjectPopup (:8000/static/admin/j…ctLookups.js:133:17)
    at popup_response.js:12:16
add_to_cache @ :8000/static/admin/js/SelectBox.js:60
(anonymous) @ :8000/static/admin/j…bjectLookups.js:115
updateRelatedSelectsOptions @ :8000/static/admin/j…bjectLookups.js:103
dismissAddRelatedObjectPopup @ :8000/static/admin/j…bjectLookups.js:133
(anonymous) @ popup_response.js:12

This seems to be caused by this block in RelatedObjectLookups.js:

// Update SelectBox cache for related fields.
if (typeof SelectBox !== "undefined" && SelectBox.cache[currentSelect.id]) {
    SelectBox.add_to_cache(select.id, option);
    SelectBox.redisplay(select.id);
}

Steps to Reproduce

  1. Register a ModelAdmin with:
    • A ForeignKey field (with an "Add another" popup)
    • A ManyToManyField using filter_horizontal
  1. Click the "Add another" button next to the ForeignKey field
  2. In the popup, add the new object and submit
  3. The popup window stays open with a white screen
  4. Console shows a JavaScript error from SelectBox.js

Regression

This bug was introduced in commit:

https://github.com/django/django/commit/cd0479ff764272add5e0aba2afcf5649a241ca00

Expected Behavior

The popup should close normally and update the original select field with the new object, as it does when filter_horizontal is not present.

Workaround

Commenting out or removing the SelectBox.add_to_cache and SelectBox.redisplay lines in RelatedObjectLookups.js avoids the error and restores expected behavior.

Version

  • Django 5.2.X
  • Reproducible in the default admin interface

Change History (2)

comment:1 by Juan Rocha, 3 months ago

Description: modified (diff)

comment:2 by Natalia Bidart, 3 months ago

Resolution: worksforme
Status: newclosed

Hello Juan, thank you for your report. I'm not being able to reproduce: I'm using the models from #35331 (State and Transition) and after your step 3, the pop closes just fine.

Can you please share a test project or some tests so that we can replicate and validate the issue?

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