У меня простая форма
class TimeForm(forms.Form):
time = forms.TimeField()
date = forms.DateField()
def clean_date(self):
time = self.cleaned_data['time']
date = self.cleaned_data['date']
date_time = datetime.combine(date, time)
if datetime.now() > date_time:
raise ValidationError("datetime error")
return start_date
с представлением на основе класса
class TimeView(View):
@staticmethod
def post(request):
form = TimeForm(request.POST)
if form.is_valid():
# do something
json_data = json.dumps({'some_record': value})
else:
json_data = json.dumps({'errors': form.errors})
return HttpResponse(json_data, content_type='application/json')
В html у меня есть стандартная форма с отправленным подключенным do ajax
<form action="/time_url/" method="POST" id="time_form">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit">
</form>
<script>
$('#time_form').submit(function(event) {
event.preventDefault();
$.ajax({
type: "POST",
url: '/time_url/',
dataType: 'json',
data: $(this).serialize(),
success: function(data, textStatus, jqXHR){
alert('yay');
}
})
});
</script>
и я хотел бы иметь возможность отправить эту форму без перезагрузки страницы. Кажется, все работает отлично, но функция успеха ajax не запускается, вместо этого страница перенаправляется в / time_url / с данными json. Не имеет значения, является ли форма действительной или нет, она всегда перенаправлена.
Я пробовал также с
return JsonResponse(form.errors.get_json_data())
вместо
return HttpResponse(json_data, ...)
как предлагается здесь Форма Django отправляется с ajax , но безуспешно.
Я новичок в javascript, но для меня это похоже на проблему с ajax, поскольку надлежащие данные обслуживаются сервером.
Спасибо за любые советы.