У меня есть вид, где я проверяю дату и время отправки формы, проверяя, что дата + время не прошло. Дата и время - это два отдельных поля. Он работает, но я знаю, что его неправильный способ сделать это, а дата + время должно быть подтверждено в Django Forms.Django Validate Date & Time in Forms
Это в моем view.py
(Вероятно, не сделали правильный путь, но он работает)
my_date = request.session['reservationdate'] #in "mm/dd/yyyy" format
my_time = request.session['reservationtime'] #in "hh:mm" format
my_date_time = (my_date + ' ' + my_time + ':00') #convert to "mm/dd/yyyy hh:mm:ss"
my_date_time = datetime.strptime(my_date_time, '%m/%d/%Y %H:%M:%S') #convert to valid datetime
if datetime.now() <= my_date_time:
#do this
else:
...
теперь моя цель состоит в том, чтобы иметь что-то вроде выше в Django форм:
class MyForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields['my_date'].required = True
self.fields['my_time'].required = True
...
def clean_my_date(self):
my_date = self.cleaned_data['my_date']
my_time = self.cleaned_data['my_time']
my_date_time = (my_date + ' ' + my_time + ':00')
my_date_time = datetime.strptime(my_date_time, '%m/%d/%Y %H:%M:%S')
if datetime.now() <= my_date_time:
raise forms.ValidationError(u'Wrong Date!')
return my_date
class Meta:
model = MyModel
fields = ['my_date', 'my_time', ...]
Редакция:
рабочий код:
def clean_my_time(self):
my_date = self.cleaned_data['my_date']
my_time = self.cleaned_data['my_time']
my_date_time = ('%s %s' % (my_date, my_time))
my_date_time = datetime.strptime(my_date_time, '%Y-%m-%d %H:%M:%S')
if datetime.now() >= my_date_time:
raise forms.ValidationError(u'Wrong Date or Time! "%s"' % my_date_time)
return my_time
Спасибо всем за помощь, особенно xyres за его работу и за то, что пациент со мной!
Там нет фактически никакой необходимости определить '__init__' метод в ваших формах. Но где проблема? – xyres
Его «KeyError». он жалуется на 'my_time = self.cleaned_data ['my_time']' – WayBehind
Попробуйте использовать 'my_time = self.cleaned_data.get ('my_time')'. – xyres