在Django表单中创建日期范围滑块

2024-10-02 14:22:42 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这是表单.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)

这是模型.py

^{pr2}$

这是视图.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)

给你字段.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>         

如果我向表单传递常规整数值,范围幻灯片就会出现,我可以与它交互。当日期值在文本框中显示时传递,但滑块消失。接受其他建议/不同的做事方式。在


Tags: djangonamefromimportselfformfieldrequest