这是另一种动态更改输入格式的方法
表格.py:
class ReportForm(forms.Form):
manual_time = forms.TimeField(input_formats = TIME_INPUT_FORMAT,
widget=forms.TimeInput(attrs={'size':'8','class':'time_field'}))
manual_date = forms.DateField(widget=forms.DateInput(
attrs={'size':'15', 'id':'datepicker'}))
def __init__(self, *args, **kwargs):
# Get the date_format if present in parameters
date_format = None
if 'date_format' in kwargs:
date_format = kwargs.pop('date_format')
super(ReportForm, self).__init__(*args, **kwargs)
# Dynamically set input date format
if date_format:
self.fields['manual_date'].input_formats = (date_format, )
视图.py
def when(request):
"""To view and save report time and date
"""
if not 'report_id' in request.session:
return redirect('incident.views.new_report')
report_id = request.session['report_id']
report = Report.objects.get(pk=report_id)
try:
settings = Settings.objects.get(user=request.user)
dateformat = settings.date_format
timeformat = settings.time_format
except:
dateformat = False
timeformat = False
date = None
time = None
if not report.manual_date:
report.manual_date = datetime.datetime.now()
if not report.manual_time:
report.manual_time = datetime.datetime.now()
manual_date = datetime.datetime.now()
if int(dateformat):
date_format = '%m/%d/%Y'
datelabel = "Date(mm/dd/yyyy)"
createddate = report.created_date_time.strftime('%b %d %Y')
else:
date_format = '%d/%m/%Y'
datelabel = "Date(dd/mm/yyyy)"
createddate = report.created_date_time.strftime('%d %b %Y')
date = report.manual_date.strftime(date_format)
if int(timeformat):
time = report.manual_time.strftime('%H:%M')
timelabel = "Time(24hour)"
createdtime = report.created_date_time.strftime('%H:%M')
else:
time = report.manual_time.strftime('%I:%M %p')
timelabel = "Time(12hour)"
createdtime = report.created_date_time.strftime('%I:%M %p')
if request.method == 'POST':
reportform = ReportForm(request.POST, date_format=date_format)
if reportform.is_valid():
report.manual_date = reportform.cleaned_data['manual_data']
report.manual_time = reportform.cleaned_data['manual_time']
report.user = request.user
report.save()
if not 'next' in request.POST:
return redirect('incident.views.report_confirm')
return redirect('incident.views.media')
else:
reportform = ReportForm(instance=report, initial={'manual_date':date, 'manual_time':time})
leftbar = common_leftbar(request, report_id)
return render_to_response('incident/when.html',
{
'newreport_menu': True,
'when_tab': True,
'reportform': reportform,
'datelabel':datelabel,
'timelabel':timelabel,
'createddate':createddate,
'createdtime':createdtime,
'incident': report,
'leftbar':leftbar
},
context_instance=RequestContext(request))
input_formats
创建表单时动态更改 DateField 属性的关键。因此,当您提交表单时,您应该传递date_format
并且默认的 DateField 应该可以很好地转换您的日期。您将不得不将此代码改编为您的代码,因为我已经在上面的代码中假设了一些内容。