以Django形式创建日期范围滑块

时间:2018-10-01 21:31:59

标签: python django slider date-range

我在Django中遇到一些实现问题。我的应用程序从用户上传的excel中读取数据。它从中提取日期,例如最早的日期和最近的日期。我能够以html格式显示这两个日期摘录,并允许用户自定义选择时间范围。 (通过django form.py)。为了提供更好的用户体验,我想以允许用户使用的形式创建日期范围滑块。到目前为止,我能够找到一个名为django_range_slider的Django程序包。 (https://github.com/shaklev/django_range_slider/tree/master/test_slider)只要范围的整数值,我也可以正确实现此程序包功能。当我输入日期值时,它不能很好地工作。

这是 forms.py

from django import forms
from .fields import RangeSliderField
from .models import TestModel
from django.forms.widgets import SelectDateWidget
class TestFieldForm(forms.Form):

class Meta:
    model = TestModel
    fields = ['range_field','name_range_field','label_range_field']

def __init__(self, *args, **kwargs):
    super(TestFieldForm, self).__init__(*args, **kwargs)
    self.fields['name_range_field'] = RangeSliderField(minimum=30,maximum=300,name="TestName")
    self.fields['range_field'] = RangeSliderField(minimum=10,step=10,maximum=102)
    self.fields['label_range_field'] = RangeSliderField(label=True,minimum=1,maximum=100)

class fcPForm(forms.Form):

label_range_field = RangeSliderField(label="Date Range",minimum="",maximum="") # with label (no name)

这是 models.py

from __future__ import unicode_literals

from django.db import models
class TestModel(models.Model):
    #range_field = models.CharField(max_length=200)
    #name_range_field = models.CharField(max_length=200)
    label_field = models.DateField()

这是 views.py

from .models import actuals,forecast,TestModel

def analyze(request):
    if request.method == 'POST':
    form = InputForm(request.POST,request.FILES)
    dataType = request.POST.get("DataType")
    request.session['dataType']=dataType
    if form.is_valid():
        sheet = request.FILES['FileLocation'].get_sheet()
        book = request.FILES['FileLocation'].get_book()
        #do calculation to find out eDate,lDate
        fcForm = fcPForm(initial = {'label_range_field':(eDate,lDate)})

        if fcForm.is_valid():
            cdFC = fcForm.cleaned_data

        return render(request,'abc.html',{'earliestDt':earliestDate,'latestDt':latestDate,'form':fcForm,context)

这是fields.py:

from django import forms
from .widgets import RangeSlider

class RangeSliderField(forms.CharField):
    def __init__(self, *args, **kwargs):
        self.name = kwargs.pop('name', '')
        self.minimum = kwargs.pop('minimum',0)
        self.maximum = kwargs.pop('maximum',100)
        self.step = kwargs.pop('step',1)
        kwargs['widget'] = RangeSlider(self.minimum, self.maximum, self.step, self.name) 
        if 'label' not in kwargs.keys():
            kwargs['label'] = False
        super(RangeSliderField, self).__init__(*args, **kwargs)

这是abc.html:

   <form action="{% url 'DjangoApp:xyz'%}" method="post" enctype="multipart/form-data">{% csrf_token %}
                            <table>
                                {{ form }}
                            </table>
                            {% csrf_token %}
                            <input type="submit" value="Submit Data">
                        </form>         

如果我将常规整数值传递给表单,则会显示范围幻灯片,并且能够与之交互。当传递的日期值显示在文本框中时,但滑块消失。愿意接受其他建议/不同的做事方式。

0 个答案:

没有答案