首页 > 解决方案 > 将数据从 datepicker 表单传递到 APIView

问题描述

我目前正在尝试使用 graphjs 在我的网站上动态加载图表。我想要做的是通过选择时间范围或特定数据类型来更新数据。我希望它更灵活,只有两个视图;一个用于渲染图形,另一个用于返回相关数据。我认为我的日期小部件将使用 post 方法通过 HomeView 传递数据。如何将日期信息传递给 GenericDataView ?或者也许还有其他方法可以做这种事情。

编辑

class HomeView(View):
    def get(self,request,*args,**kwargs):
        return render(request,'charts/charts.html')

class GenericDataView(APIView):
    def get(self,request,*args,**kwargs):
        selected_data = getDataFromTimeRange()

        if selected_data is not None:
             return Response(selected_data)

        if request.method == 'POST':
            form = DatePickerCustom(request.POST)
            if form.is_valid():
                mydate = form.cleaned_data('production_day')
                print("DATE: ", mydate)
        else:
            form = DatePickerCustom()

def getDataFromTimeRange():
     // do things
     return data;

在 forms.py 中:

dateCustomInput = DateInput(attrs={'class':'datepicker'})

class DatePickerCustom(Form):
    production_day = DateField(label='Production day',widget=dateCustomInput)

在 chart.hmtl 中:

function csrfSafeMethod(method) {
    // these HTTP methods do not require CSRF protection
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
    beforeSend: function(xhr, settings) {
        if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
            console.log(xhr)
            console.log(csrftoken)
            xhr.setRequestHeader("X-CSRFToken", csrftoken);
            console.log(X-CSRFToken)
        }
    }
});
<div class="chart-container"  url-endpoint='{% url "api-data" %}' style="position: relative">
        <canvas id="myChart"></canvas>
</div>
<form action="chart" method="post" enctype='multipart/form-data'>
    <!-- {{ csrf_input }}-->
    {% csrf_token %} 
    <label for="date">Choose a date: </label>
    <input id="datepicker" type="text" name="selectedDate" value="{{ form }}">
    <input type="submit" value="OK">
</form>

标签: djangoviewdjango-rest-frameworkjquery-ui-datepicker

解决方案


推荐阅读