Opened 9 months ago

Closed 5 months ago

#35331 closed Bug (fixed)

Adding a new related entry using the "+" sign from M2M field doesn't update lists.

Reported by: Devin Cox Owned by: Devin Cox
Component: contrib.admin Version: 5.0
Severity: Normal Keywords:
Cc: Triage Stage: Ready for checkin
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: yes UI/UX: yes

Description (last modified by Mariusz Felisiak)

Related to Ticket #34789, PR https://github.com/django/django/pull/17897

Models:

from django.db import models


class State(models.Model):
    label = models.CharField(max_length=255)

    def __str__(self):
        return self.label


class Transition(models.Model):
    source = models.ManyToManyField(State, related_name="transition_source")
    target = models.ForeignKey(State, related_name="transition_target", on_delete=models.CASCADE)

Admin:

from django.contrib import admin

from .models import State, Transition


class TransitionAdmin(admin.ModelAdmin):
    filter_horizontal = ['source']


admin.site.register(State)
admin.site.register(Transition, TransitionAdmin)

Steps to Reproduce:

Add a State via the "+" on the M2M field to add to the Chosen Source column. We would expect the dropdown for the Target to contain the new value, but it does not.

Resolution as suggested by @nessita on the provided PR:

"For this, I tracked down the issue to the selector used in dismissAddRelatedObjectPopup to decide whether to call updateRelatedSelectsOptions or not. Basically the id used in the document.getElementById is wrong for the M2M widget (but correct for the single FK field, so we may need to fix the call site to pass the proper name)"

--- a/django/contrib/admin/static/admin/js/admin/RelatedObjectLookups.js
+++ b/django/contrib/admin/static/admin/js/admin/RelatedObjectLookups.js
@@ -119,7 +119,7 @@
 
     function dismissAddRelatedObjectPopup(win, newId, newRepr) {
         const name = removePopupIndex(win.name);
-        const elem = document.getElementById(name);
+        const elem = document.getElementById(name + '_from');
         if (elem) {
             const elemName = elem.nodeName.toUpperCase();
             if (elemName === 'SELECT') {

Change History (10)

comment:1 by Mariusz Felisiak, 9 months ago

Description: modified (diff)
Summary: When adding a new related entry using the "+" sign from M2M field, no other widgets get updated.Adding a new related entry using the "+" sign from M2M field doesn't update lists.
Triage Stage: UnreviewedAccepted

comment:3 by Natalia Bidart, 9 months ago

Patch needs improvement: set

comment:4 by Devin Cox, 9 months ago

Patch needs improvement: unset

comment:5 by Sarah Boyce, 8 months ago

Patch needs improvement: set

comment:6 by Devin Cox, 7 months ago

Patch needs improvement: unset

comment:7 by Sarah Boyce, 6 months ago

Patch needs improvement: set

comment:8 by Devin Cox, 5 months ago

Patch needs improvement: unset

comment:9 by Sarah Boyce, 5 months ago

Triage Stage: AcceptedReady for checkin

comment:10 by Sarah Boyce <42296566+sarahboyce@…>, 5 months ago

Resolution: fixed
Status: assignedclosed

In cd0479f:

Fixed #35331 -- Updated dropdown lists with entries added via the '+' sign from M2M field.

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