Создать ползунок диапазона дат в форме Django - PullRequest
0 голосов
/ 02 октября 2018

Я столкнулся с проблемой реализации в Django.Мое приложение считывает данные из Excel, загруженные пользователем.Из него извлекаются даты, такие как самая ранняя дата и недавняя дата.Я могу показать эти два извлечения даты в виде HTML и позволить пользователям настраивать временной диапазон.(через 'django forms.py).Чтобы улучшить взаимодействие с пользователем, я хочу создать ползунок диапазона дат в форме, которая позволит пользователям.На данный момент я могу найти пакет Django с именем django_range_slider.(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>         

Если я передам регулярные целые значения в форму, показывается слайд диапазона, и я могу с ним взаимодействовать. Когда значения даты передаются, как показано в текстовом поле, но ползунок исчезает. Откройте для других предложений / другого способа выполнения действий.

...