2016-12-14 1 views
0

У меня есть форма Django, на котором отображается поле даты, которое имеет тип данных mDateField (пользовательский класс, который расширяет forms.DateField). Она определяется в forms.py с:Django/Python задает минимальные/максимальные значения даты на DateTimeField

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: invalid syntax

Что не так с тем, что я здесь делаю? Как я могу указать, какой должна быть самая ранняя/последняя дата, которая должна быть показана в datepicker?

Редактировать В файле JQuery, где datetimepicker определен (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

Но .. это код jQuery. Почему вы помещаете это в файл Python? –

+0

Ах, так что я должен помещать это в код jQuery где-нибудь? Насколько я понимаю, мой код Python ссылается на внешнюю библиотеку jQuery - я не думаю, что у меня есть какой-либо локальный код jQuery, который влияет на 'mDateTimeField' вообще ... Если я щелкнул правой кнопкой мыши на' datetimepicker' в моем коде и «Перейти к определению» он открывает файл jquery.datetimepicker.full.js, но, как я понимаю, это внешняя библиотека, поэтому я не смогу это изменить? – someone2088

ответ

1

Хорошо, во-первых - удалите код javascript из файлов python;). Второй - Любая проверка формы django должна выполняться на сервере (Django), а не на интерфейсе (JS)! Итак, вы можете сделать две вещи:
1) Написание пользовательского виджета и добавление его в поле даты (это сложнее).
2) Используйте Джанго по умолчанию 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 
+0

Проблема, с которой я сталкиваюсь, заключается в том, что 'mDateTimeField', который отображает' datetimepicker' в форме, когда пользователь нажимает в этом поле, будет отображать только даты между 01/01/2015-01/01/2017 (когда я прокручиваю вперед/назад через календарь, который отображается). Очевидно, что, поскольку он приближается к 01/01/2017, мне нужно иметь возможность планировать встречи на даты, выходящие за пределы 01/01/2017, но все даты позже этого в календаре/'datetimepicker' выделены серым цветом и их невозможно выбрать. Поле должно быть значением 'DateTime', а не значением' Date' ... – someone2088

+0

После поиска на моем компьютере файла, в котором определен 'datetimepicker', я нашел его в файле project/static/js , Когда вы смотрите на свойства файла, он утверждает, что библиотека была разработана krajee.com. Я просмотрел документацию по адресу http: //plugins.krajee.com, но не может видеть никакой ссылки на значение «минимальное» или «максимальное». Мне интересно, может быть, плагин не поддерживает это? Но, похоже, странно, что единственные даты, доступные для выбора, - в течение последних двух лет ... Может быть, это было жестко закодировано в плагине? – someone2088

+0

javascript не находится в файлах Python - он находится в шаблоне (.html), и есть также .js-файл, который «включен» в шаблон. – someone2088