我有一个Django表单,其上显示了一个日期字段,其数据类型为mDateField
(一个扩展forms.DateField
的自定义类)。它在forms.py中定义为:
class mDateField(forms.DateField):
def __init__(self, *args, **kwargs):
kwargs.setdefault('input_formats', DATE_INPUT_FORMATS)
super(mDateField, self).__init__(*args, **kwargs)
我现在想设置一个'最小'&该日期字段的“最大”可能值(即过去或将来与该值可设置为的今天相关的某个时间长度的日期)。
我在SO上发现了这个答案:jquery datetime picker set minDate dynamic并尝试按照它所说的,写下这句话:
presentation_date = mDateTimeField(required=False, widget=forms.DateTimeInput(format='%d/%m/%Y %H:%M', attrs=({'class':'datetimepicker presentation_date', 'name':'presentation_date2'})))
presentation_date.options.maxDate = $( ".selector" ).datepicker( "option", "maxDate", new Date(2014, 1 - 1, 1));
但是当我这样做时,我在控制台中出现语法错误,该错误指向$
,并说:
SyntaxError:语法无效
我在这里做的有什么问题?如何指定datepicker
中显示的最早/最晚日期应该是什么?
编辑在定义datetimepicker
的jQuery文件中(jquery.datetimepicker.full.js),有以下几行:
if (options.minDate && /^[\+\-](.*)$/.test(options.minDate)) {
options.minDate = dateHelper.formatDate(_xdsoft_datetime.strToDateTime(options.minDate), options.formatDate);
}
if (options.maxDate && /^[\+\-](.*)$/.test(options.maxDate)) {
options.maxDate = dateHelper.formatDate(_xdsoft_datetime.strToDateTime(options.maxDate), options.formatDate);
}
但我不知道这些是如何将值设置为任何实际日期......?
答案 0 :(得分:1)
好的,首先 - 从python文件中删除javascript代码;)。 第二 - 你的django表单的任何验证必须在服务器(Django)上完成,而不是前端(JS)!所以,你可以做两件事: 1)编写自定义小部件并将其添加到您的日期字段(这更难) 2)使用django默认DateField(https://docs.djangoproject.com/en/1.10/ref/forms/fields/#datefield):
presentation_date = forms.DateField()
如果使用默认的DateField,您可以在表单类中编写自定义方法,名为(clean_your_field_name),在您的情况下,它将被称为clean_presentation_date:
def clean_presentation_date(self, value):
if value >= some date and value < another_date:
raise form.ValidationError('The date must be ...')
return value