django - linux 上的 FF92.0 引入了 django 3.2 内联表单的缓存问题
问题描述
在使用内联表单时,我注意到 FF 92.0(Manjaro Linux,但我猜可能是所有 linux)有一个奇怪的行为。
设置:
- Django 内联表单
- 一种添加内联 ajax 的方法。我正在使用 django 表单 empty_form
- 为该对象在服务器上保存的一些任意 # 内联(例如,说 3)
- 加载表单,使用 javascript 添加说 2 个内联。TOTAL_FORMS 现在显示 value=5
- 不要提交表单,而是 F5 进行刷新
- 重新加载后,表中显示的内联将反映服务器的内联
- 但是 management_form 中的 TOTAL_FORMS 将显示 value=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)
- 这不会在硬刷新时发生(FF 上的 ctrl shift r)。TOTAL_FORMS,在相同的设置下,显示正确的 # of 3。
- 这不会在正常刷新时在 Google Chrome 上发生。
所以....关于我应该如何解决这个问题的任何想法?什么设置可能导致问题?请在任何答案中考虑:
- 我无法控制用户行为。所以简单地“不在FF上使用软刷新”是无效的。
- 我无法控制用户浏览器设置,因此调整某些设置不会真正起作用(尽管知道哪个 FF 设置可能会导致问题仍然有用)
解决方案
推荐阅读
- sql - 根据 SQL 中的其他 2 列递增列值
- ios - WKWebView 发布请求 Swift 5
- css - 回退以适应整个浏览器宽度
- reactjs - React w/Typescript: useReducer, Action Interface w/ Union Type
- python - python:基于匹配两个数据集中的多个列合并两个数据库并在结果上应用脚本
- python-3.x - 将包含mp3歌曲的python文件转换为可执行文件
- swift - swiftui为什么不能分配可选?
- mapbox - 添加 Maki 图标而不是 Mapbox 地理编码器标记
- ruby-on-rails - 如何在postgresql rails中搜索具有多个值的数组列
- html - Angular如何使表头变粘