#36468: Popup stays blank after adding a related object when filter_horizontal is used -------------------------------------+------------------------------------- Reporter: Juan Rocha | Owner: (none) Type: Bug | Status: new Component: contrib.admin | Version: 5.2 Severity: Normal | Resolution: Keywords: filter_horizontal; | Triage Stage: SelectBox; add_to_cache; | Unreviewed Has patch: 0 | Needs documentation: 0 Needs tests: 0 | Patch needs improvement: 0 Easy pickings: 0 | UI/UX: 0 -------------------------------------+------------------------------------- Description changed by Juan Rocha:
Old description: > 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 > > 2. Click the "Add another" button next to the ForeignKey field > 3. In the popup, add the new object and submit > 4. The popup window stays open with a white screen > 5. Console shows a JavaScript error from SelectBox.js > > === 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 New description: 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 2. Click the "Add another" button next to the ForeignKey field 3. In the popup, add the new object and submit 4. The popup window stays open with a white screen 5. 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 -- -- Ticket URL: <https://code.djangoproject.com/ticket/36468#comment:1> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/django-updates/010701977de06c03-eadfb836-1a31-4bcf-ab57-87f5cb0c0f32-000000%40eu-central-1.amazonses.com.