javascript - 如何将自定义 DateRangePicker 小部件与 Django 过滤器的 DateFromToRangeFilter 一起使用
问题描述
所以我有这个过滤器使用Django Filter
:
class AssignmentFilter(FilterSet):
assignment_date = filters.DateFromToRangeFilter()
这个内置的 Django Filter 类会生成一个包含这两个输入的表单:
<input type="text" name="assignment_date_after" id="id_assignment_date_0">
<input type="text" name="assignment_date_before" id="id_assignment_date_1">
因此,您可以在此处选择两个日期,并根据该日期为您提供过滤后的 QuerySet。一切运作良好。
但是我想使用这个有用的 DateRangePicker: https ://www.daterangepicker.com/
这会像这样被激活:
<input type="text" name="dates" class="form-control">
<script>
$('input[name="dates"]').daterangepicker();
</script>
但是,正如您所见,这只是设置日期范围的一个字段。但Django Filter
适用于开始输入字段和结束输入字段。
我该如何修改它,以便我可以使用属于input[name="dates"]
.
GET
也许一个解决方案是在请求后用 JavaScript 处理它。然后,该函数将获取开始日期并将其注入该id_assignment_date_0
字段。并取结束日期并将其注入id_assignment_date_1
现场。字段id_assignment_date_0
和id_assignment_date_1
都将在视觉上隐藏在表单中。不过,这似乎很hacky。
有没有人有一个聪明的解决方案?
解决方案
根据这个例子,你可以像这样完成你想要的:
<input type="text" id="datePicker" name="dates" class="form-control">
<input type="hidden" name="assignment_date_after" id="id_assignment_date_0">
<input type="hidden" name="assignment_date_before" id="id_assignment_date_1">
<script>
$(function() {
$('input[name="dates"]').daterangepicker({
opens: 'left'
}, function(start, end, label) {
$('#id_assignment_date_0').val(start)
$('#id_assignment_date_1').val(end)
});
$('#datePicker').removeAttr('name');
});
</script>
虽然,格式可能与您需要的不同。您还可以使用以下内容更改格式:
$('#id_assignment_date_0').val(start.format('YYYY-MM-DD'))
推荐阅读
- angular - Angular 自定义表单控件永远不会让我的表单变脏
- javascript - 如何获取包含阿根廷等国籍的演员按全名排序:输入网址邮递员时出错
- flutter - 是否能够使用带有提供程序的无状态小部件为动画容器设置动画
- java - 我们可以从抽象类创建对象吗?
- python - 如何在seaborn中绘制选择Y值
- node.js - 如何在 tor 上发布我的 node.js 服务器?
- ibm-cloud - IBM Watson Assistant:如何存储任何类型的输入?
- github-actions - 带有自托管 Windows-Runner 的 GitHub Actions“找不到文件:'bash'”
- flutter - 在底部导航栏中颤动自定义形状按钮
- makefile - Makefile 结合类似的规则