diff --git a/django/static/admin/js/autocomplete.js b/django/static/admin/js/autocomplete.js
index 5e6816b..db8f4ad 100644
--- a/django/static/admin/js/autocomplete.js
+++ b/django/static/admin/js/autocomplete.js
@@ -5,6 +5,61 @@
$.fn.djangoAdminSelect2 = function() {
$.each(this, function(i, element) {
const select2_config = {};
+ let filtered_by_fields;
+ let reset_on_something = false;
+ const reset_on_excluded = [];
+ const reset_on_included = [];
+
+ if (element.dataset.hasOwnProperty('drilldown_enabled')) {
+
+ if (element.dataset.hasOwnProperty('reset_on_included')) {
+ reset_on_included.push(...JSON.parse(element.dataset.reset_on_included));
+ reset_on_something = true;
+ }
+
+ if (element.dataset.hasOwnProperty('filtered_by')) {
+ filtered_by_fields = JSON.parse(element.dataset.filtered_by);
+ if (element.dataset.hasOwnProperty('reset_on_excluded')) {
+ reset_on_excluded.push(...JSON.parse(element.dataset.reset_on_excluded));
+ reset_on_something = true;
+ }
+
+ }
+ if (reset_on_something) {
+ element.drilldown_items = {};
+ }
+
+ select2_config.templateResult = (item, container)=>{
+ let styleClass = '';
+
+ element.classList.add('drilldown');
+
+ if (item.ddok === 1) {
+ styleClass = 'drilldown_ok';
+ } else {
+ styleClass = 'drilldown_ko';
+ }
+
+ container.classList.add(styleClass);
+ if (reset_on_something) {
+ element.drilldown_items[item.id] = item;
+ }
+
+ if (item.hasOwnProperty('autoselect')) {
+ const includedOnly = element.dataset.included_only ?? false;
+ const dataLength = $(element).select2('data').length;
+
+ if (includedOnly || dataLength == 0) {
+ $(element).select2("trigger", "select", {
+ data: item
+ })
+ }
+ }
+
+ return $(``).text(item.text);
+ }
+ }
+
select2_config.ajax = {
data: (params)=>{
const {fieldName, appLabel, modelName} = element.dataset;
@@ -18,8 +73,12 @@
if (element.dataset.hasOwnProperty('drilldown_enabled')) {
+ if (reset_on_something && (params.page ?? 1) < 2) {
+ element.drilldown_items = {};
+ }
+
if (element.dataset.hasOwnProperty('filtered_by')) {
- const filtered_by_fields = JSON.parse(element.dataset.filtered_by)
+
const filtered_by_dict = {};
let some_obj = false;
@@ -47,61 +106,18 @@
}
};
- if (element.dataset.hasOwnProperty('drilldown_enabled')) {
- select2_config.templateResult = (item,container)=>{
- let styleClass = '';
-
- element.classList.add('drilldown');
-
- if (item.ddok === 1) {
- styleClass = 'drilldown_ok';
- } else {
- styleClass = 'drilldown_ko';
- }
-
- container.classList.add(styleClass);
-
- if (item.hasOwnProperty('autoselect')) {
- const includedOnly = element.dataset.included_only ?? false;
- const dataLength = $(element).select2('data').length;
-
- if (includedOnly || dataLength == 0) {
- $(element).select2("trigger", "select", {
- data: item
- })
- }
- }
-
- return $(``).text(item.text);
- }
- }
-
$(element).select2(select2_config);
- const reset_on_excluded = [];
- const reset_on_included = [];
- let all_fields_to_reset;
- let reset_on_something = false;
-
- if (element.dataset.hasOwnProperty('reset_on_excluded')) {
- reset_on_excluded.push(...JSON.parse(element.dataset.reset_on_excluded));
- reset_on_something = true;
- }
-
- if (element.dataset.hasOwnProperty('reset_on_included')) {
- reset_on_included.push(...JSON.parse(element.dataset.reset_on_included));
- reset_on_something = true;
- }
-
if (reset_on_something) {
- $(element).on('select2:select', (ev)=>{
+ $(element).on('select2:select', (ev) => {
const data = $(element).select2('data');
- if (Array.isArray(data) && data.length > 0) {
- const ddok = data[0].ddok;
+ if (element.hasOwnProperty("drilldown_items") && Array.isArray(data) && data.length > 0) {
+ const item = element.drilldown_items[data[0].id];
+ const ddok = item !== undefined ? item.ddok : undefined;
if (ddok !== undefined) {
- all_fields_to_reset = ddok ? reset_on_included : reset_on_excluded;
+ let all_fields_to_reset = ddok ? reset_on_included : reset_on_excluded;
if (all_fields_to_reset.length > 0) {
all_fields_to_reset.forEach((field_to_reset)=>{