В 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 может вызвать проблему, все равно полезно).