我正在开发一个应用程序,我正在使用时间字段来节省时间,我使用jquery插件来选择时间。我的问题是当我选择插件添加AM和PM的时间时,django表单验证返回无效表单。
我尝试了self.clean_field方法和clean方法从用户提交的时间值中删除am和pm。但没有任何办法。
我的models.py是
class Schedule(models.Model):
day=models.CharField(max_length=2,choices=DAY_OF_WEEK)
start_time=models.TimeField(null=True,blank=True)
end_time=models.TimeField(null=True,blank=True)
def __unicode__(self):
return self.day
我的表格是
class ScheduleForm(forms.ModelForm):
class Meta:
model = Schedule
widgets={
'day':forms.TextInput(attrs={'readonly':True,'class':'day_class_name'}),
'start_time':forms.TextInput(attrs={'class':'schedule_start_time'}),
'end_time':forms.TextInput(attrs={'class':'schedule_end_time'}),
}
time_formats = ['%H:%M', '%I:%M%p', '%I:%M %p']
def clean(self):
print ' i am in clean method'
#start=self.cleaned_data['start_time']
#end=self.cleaned_data['end_time']
#print start, end
# print self.cleaned_data
return self.cleaned_data
def clean_start_time(self):
#print dir(self)
start=self.get('start_time',None)
print start
#print self.data
#print ' i am in clean_start_time method'
#start=self.cleaned_data['start_time']
#print start
#if start and ('AM' or 'PM' in start):
# start.replace('AM','')
# start.replace('PM','')
# return start
return start
def clean_end_time(self):
# print ' i am in clean end_time method'
start=self.cleaned_data['end_time']
#print start
#if start and ('AM' or 'PM' in start):
# start.replace('AM','')
# start.replace('PM','')
#return start
return start
有人可以指导我在实际的django表格验证发生之前我必须覆盖哪个方法从值中删除am和pm。 帮助将不胜感激
答案 0 :(得分:1)
您的问题是基于对正在发生的事情的完全误解。你不在cleaning_data中使用“am”或“pm”获取任何值。 Django将字符串形式转换为datetime.time
的实际实例,这就是您所需要的。
您的问题实际上是由于您未能正确设置时间格式造成的。而不是在表单的末尾随机放置一个名为time_formats
的列表,而是完全忽略它,您需要在时间字段本身上设置一个名为input_formats
的值:
class ScheduleForm(forms.ModelForm):
start_time = forms.TimeField(input_formats=['%H:%M', '%I:%M%p', '%I:%M %p'])
...
现在该字段将接受上午/下午的时间,您不需要做任何其他事情。
答案 1 :(得分:-1)
以下内容应该有效。覆盖干净的方法。
class ScheduleForm(forms.ModelForm):
def clean(self):
cleaned_data = super(ScheduleForm, self).clean()
# Here you remove what you need
return cleaned_data