﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
34025	Bug on autocomplete field when two fields from same reference model are added in same page	Alexandre da Silva	nobody	"Example of how to reproduce:

1. create a model Person.

{{{
class Person(models.Model):
    name= models.CharField(max_length=255)
}}}

2. create a model Order with 2 fks pointing to person, for example: supplier and customer


{{{
class Order(models.Model):
    supplier = models.ForeignKey(Person, related_name='the_supplier', on_delete=models.PROTECT)
    customer = models.ForeignKey(Person, related_name='the_customer', on_delete=models.PROTECT)
}}}

3. create an admin page for Order.

4. place the two fields in autocomplete_fields:

{{{
class OrderAdmin(admin.ModelAdmin):
    autocomplete_fields = ['supplier', 'customer']
}}}

5. do the migration stuff and run the app.

when create an supplier from + symbol near the supplier, when close the window both fields get updated with the ID
this also occurs when editing.


ps. I´m not an expert but the code that seems to introduce this bug is on commit c72f6f36c13a21f6db3d4f85d2d3cec87bad45e6
probably on **data-model-ref** tag, since in the page all autocompletes have the same **data-model-ref** value, in this example will be ""person""

{{{
function updateRelatedSelectsOptions(currentSelect, win, objId, newRepr, newId) {
        // After create/edit a model from the options next to the current
        // select (+ or :pencil:) update ForeignKey PK of the rest of selects
        // in the page.

        const path = win.location.pathname;
        // Extract the model from the popup url '.../<model>/add/' or
        // '.../<model>/<id>/change/' depending the action (add or change).
        const modelName = path.split('/')[path.split('/').length - (objId ? 4 : 3)];
        const selectsRelated = document.querySelectorAll(`[data-model-ref=""${modelName}""] select`);

        selectsRelated.forEach(function(select) {
            if (currentSelect === select) {
                return;
            }

            let option = select.querySelector(`option[value=""${objId}""]`);

            if (!option) {
                option = new Option(newRepr, newId);
                select.options.add(option);
                return;
            }

            option.textContent = newRepr;
            option.value = newId;
        });
    }
}}}

 "	Bug	new	Uncategorized	4.1	Normal		admin, autocomplete		Unreviewed	0	0	0	0	0	1
