Django / Python在DateTimeField上设置最小/最大日期值

时间:2016-12-14 15:33:19

标签: jquery python django date datepicker

我有一个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);
}

但我不知道这些是如何将值设置为任何实际日期......?

1 个答案:

答案 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