我正在从ajax到Django获取日期/时间信息。我正在使用2种不同的观点。 event_edit
工作正常,但是event_edit_new
不工作。它返回错误Enter a valid date/time.
我的问题是有什么不同。他们正在获得完全相同的信息,但是一个可以,而另一个则不能。
发出ajax请求的Javascript代码:
var ajax_test = function(event){
$.ajax({
url: '/scheduler/event/' + event.eventId + '/edit2/',
method: 'POST', // 'POST' or 'PUT'
data: {
'Note': event.title,
'OpNum': event.resourceId,
'StartTime' : event.start.format(),
'StopTime' : event.end.format(),
'ScheduleNum': event.eventId,
}
}).done(function(res) {
console.log("done", res)
}).fail(function(error) {
console.error("error", error)
console.log(event.start.format());
});
}
2次观看
def event_edit(request, pk):
schedule = get_object_or_404(Schedule, pk=pk)
schedule.OpNum = request.POST.get('OpNum')
schedule.Note = request.POST.get('Note')
schedule.StartTime = request.POST.get('StartTime')
schedule.StopTime = request.POST.get('StopTime')
schedule.ScheduleNum =request.POST.get('ScheduleNum')
schedule.save()
return HttpResponse('ok')
def event_edit_new(request, pk):
schedule = get_object_or_404(Schedule, pk=pk)
if request.method =='POST':
form = ScheduleForm(request.POST, request.FILES, instance = schedule)
if form.is_valid():
form.save()
return HttpResponse('ok')
else:
return HttpResponse('error')
else:
return HttpResponse('done')
答案 0 :(得分:1)
在您的第一个视图中,没有验证适用于用户数据输入:
schedule.StartTime = request.POST.get('StartTime')
schedule.StopTime = request.POST.get('StopTime')
request.POST
不会验证任何数据,因此将完全按照提交的方式抓取用户数据并将其设置在模型上。请注意,它可能会起作用,但如果用户将发送应用程序无法理解的日期时间格式,则不能保证它会起作用。例如,尝试提交类似"invalid date"
之类的内容,您会得到500错误。
另一方面,您的第二个视图使用Django Form来验证用户输入。通过使用表单,您可以在以任何方式处理用户输入之前对其进行验证。您没有粘贴表单的结构,但是如果获取Enter a valid date/time.
,则意味着Django表单未验证datetime字段之一。造成这种情况的原因有几个:
DateTimeField
的{{3}}之一。您可以使用以下方式自定义格式:class MyForm(forms.Form):
datetime_field = forms.DateTimeField(input_formats=['%Y-%m-%dT%H:%M:%SZ', ...])
input_formats
设置来自定义它们。