В FF92.0 на linux возникли проблемы с кэшированием встроенных форм django 3.2

Я заметил странное поведение в FF 92.0 (Manjaro Linux, но, вероятно, все linux я думаю) при использовании встроенных форм.

Настройка:

  • Django inline forms
  • Способ добавления инлайн-форм ajax. Я использую django forms empty_form
  • .
  • Некоторое произвольное количество инлайнов, сохраненных на сервере для этого объекта (например, скажем, 3)
  • Загрузите форму, добавьте, скажем, 2 инлайна с помощью javascript. TOTAL_FORMS теперь показывает значение=5
  • .
  • НЕ отправляйте форму, а нажмите F5 для обновления
  • .
  • После перезагрузки инлайны, показанные в таблице, будут зеркально отражать инлайны сервера
  • .
  • Однако TOTAL_FORMS из формы management_form покажет значение=5, вместо 3, как должно быть.

page.js:

function insert_inlinedets_form () {
    let form_idx = $('#id_details-TOTAL_FORMS').val();
    console.log("inserting new form " + form_idx);
    let newrow = $('<tr></tr>').appendTo($('#details_form'));
    newrow.append($('#empty_form_inlinedets').html().replace(/__prefix__/g, form_idx));
    $('#id_details-TOTAL_FORMS').val(parseInt(form_idx)+1);
    console.log("added row to inlinedets formset");
};

function remove_inlinedets_form () {
    console.log("remove last form ");
    let form_idx = $('#id_details-TOTAL_FORMS').val();
    if (form_idx>0) {
        $('#details_form > tr').last().remove();
        $('#id_details-TOTAL_FORMS').val(parseInt(form_idx)-1);    
        console.log("removed row from inlinedets");
        calc_grand_total();                                 // existing rows haven't changed but the total might
    } else {
        $('#id_details-TOTAL_FORMS').val();                 // if no form left, this SHOULD be 0.    
        console.log("No more dets left - nothing done.");
    }
};

html - пустая форма:

<div style="display:none">
    <table>
        <thead></thead>
        <tbody>
            <tr id="empty_form_inlinedets">
                {% for field in formset.empty_form %}
                {% if field.is_hidden %}
                <td style="display:none;">{{field}}</td>
                {% else %}
                <td>{{field}}</td>
                {% endif %}         
                {% endfor %}        
            </tr>
        </tbody>
    </table>
</div>

html - целевая таблица для добавления к:

<div class="table-responsive shadow encart">
    {{ formset.management_form }}
    {{ formset.non_form_errors }}
    <table class="table table-bordered dbase-table" id="bottom_product_form" width="100%" cellspacing="0">
        <caption style="caption-side:top">Products</caption>
        <thead>
            <tr>
                <!-- th content -->
            </tr>
        </thead>
        <tbody id="details_form">
            {% for form in formset %}
            <tr>
                <!-- td content -->
            </tr>
            {% endfor %}
        </tbody>
    </table>
</div>

Я подтвердил следующее:

  • В response.rendered_content, который возвращает сервер, действительно отображается правильное число TOTAL_FORMS (3, в приведенном выше примере)
  • .
  • Этого НЕ происходит при жестком обновлении (ctrl shift r на FF). TOTAL_FORMS при тех же настройках показывает правильное число 3.
  • В Google Chrome этого НЕ происходит при обычном обновлении.

Есть идеи, как мне лучше поступить? Какая настройка может быть причиной проблемы? Пожалуйста, учитывайте в любом ответе:

  • У меня не будет контроля над поведением пользователя. Поэтому просто "не использовать мягкое обновление в FF" не подходит.
  • У меня не будет контроля над настройками браузера пользователя, поэтому регулировка некоторых настроек не поможет (хотя ЗНАТЬ, какая настройка FF может вызвать проблему, все равно полезно).
Вернуться на верх