如何将日期范围选取器的开始和结束值传递给django view.py

时间:2016-12-28 15:05:42

标签: jquery python django

我正在使用日期范围选择器(http://www.daterangepicker.com/),我想将选定的开始和结束日期传递给django view.py,以便我可以在这两个日期之间生成报告。

这是我的HTML:

    {% extends "Base.html" %}
    {% load crispy_forms_tags %}
    {% block head_title %} WEB RT | Poročila {% endblock head_title %}

    {% block content %}

    <form method="POST" action="report/">
    {% csrf_token %}
    {{form.as_p}}

<button type="submit" id="send">Izpis poročila</button>

    <div class="col-md-4">

    <div>
    <div id="reportrange" name = "date" class="pull-right" style="background: #fff; cursor: pointer; padding: 5px 10px; border: 1px solid #ccc; width: 100%"/>
        <i class="glyphicon glyphicon-calendar fa fa-calendar"></i>&nbsp;
        <span></span> <b class="caret"></b>

    </div>


    <script type="text/javascript">
    $(function() {

        var start = moment().subtract(29, 'days');
        var end = moment();

        function cb(start, end) {
            $('#reportrange span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'));
        }

        $('#reportrange').daterangepicker({
            startDate: start,
            endDate: end,
            ranges: {
               'Today': [moment(), moment()],
               'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
               'Last 7 Days': [moment().subtract(6, 'days'), moment()],
               'Last 30 Days': [moment().subtract(29, 'days'), moment()],
               'This Month': [moment().startOf('month'), moment().endOf('month')],
               'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
            }
        }, cb);

        cb(start, end);

    });

    </script>
    </div>
    </form>

    {% endblock content %}

这是我的view.py

def report (request):
    if request.method == 'POST':
        date_start = request.POST['start']
        date_end = request.POST['end']
        form = Porocila(request.POST)
        if form.is_valid():
            picked = form.cleaned_data.get('Linacs')

        else:
            messages.error(request, "Izberi vsaj en Linac!")
            return redirect('/porocila/')

1 个答案:

答案 0 :(得分:1)

在您的示例中,您正在使用POST METHOD。

因此,您需要将表单链接到daterangepicker。你不能在你的代码中做到这一点。

您拥有自己的表单,并在使用日期选择器创建div之后。 您可以创建一个包含两个日期字段的表单。

ggplot(df1, aes(x=Nets, y = Cumulative.spp)) + geom_point() + geom_line(y = predict(as.lm.nls(Model1), interval = "confidence")[,1]) + geom_ribbon(ymax = predict(as.lm.nls(Model1), interval = "confidence")[,3], ymin = predict(as.lm.nls(Model1), interval = "confidence")[,2], fill = "blue", alpha = 0.5)

在您的javascript代码中,您可以将一个日期选择器链接到每个字段。

更好的解决方案,使用日期范围选择器(http://www.daterangepicker.com/),此组件可以在一个字段中管理两个日期。添加到您的表单一个字段。

date_start = forms.DateField(...)

date_end = forms.DateField(...)

这里是CharField,因为该字段在字符串中有两个日期。 并删除链接日期选择器的div。在您的字段上链接您的日期选择器。您的字段的ID将为:id_date_range_picker。

date_range_picker = forms.CharField(...)

然后在您的视图中,您可以检索POST数据。并将date_range_picker字段视为将两个日期分开,这两个日期肯定会在一个字符串中。