Я столкнулся с проблемой реализации в 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>
Если я передам регулярные целые значения в форму, показывается слайд диапазона, и я могу с ним взаимодействовать. Когда значения даты передаются, как показано в текстовом поле, но ползунок исчезает. Откройте для других предложений / другого способа выполнения действий.