Я использую модальный загрузчик, чтобы позволить пожарному обновлять свой статус в приложении, над которым я работаю.На модале есть кнопки, которые при нажатии делают запрос POST.csrf tokens are disabled for testing purposes
models.py
class Firefighter(models.Model):
STATUS_OPTIONS = (
('AV', 'Available'),
('OD', 'On Duty'),
('UN', 'Unavailable'),
('LV', 'Leave'),
)
first_name = models.CharField("First Name", max_length = 200)
last_name = models.CharField("Last Name", max_length = 200)
status = models.CharField("Status", max_length = 20 , choices=STATUS_OPTIONS, default='Available')
views.py
def updateStatus(request, id):
from django.http import JsonResponse
if request.method=='POST' and request.is_ajax():
try:
obj = Firefighter.objects.get(id=id)
obj.data_attr = request.POST['status']
obj.save()
return JsonResponse({'status':'Record Saved'})
except Firefighter.DoesNotExist:
return JsonResponse({'status':'Record does not exist'})
else:
return JsonResponse({'status':'Invalid POST request'})
Возвращает ответ Record Saved
JSON при запуске.
urls.py
urlpatterns = [
url(r'^$', views.home, name='home'),
url(r'^status/$', views.status, name='status'),
url(r'^status/update/(?P<id>\d+)/$', views.updateStatus, name='update'),
button jQuery
$('#btnAvailable').on('click', function() {
// You gotta include the csrf_token in your post data
$.post(`/status/update/${clickedID}/`, {'status': 'AV'}, function() {
$('#change-status').modal('hide');
location.reload(true)
});
});
Все работает как надо, chrome не выдает консольных ошибок для запроса POST, но status
не сохраняется в БД.Например, для /status/update/22/
их статус в настоящее время установлен на UN
(Недоступно), для запроса на отправку должно быть установлено значение AV
(Доступно), однако в БД состояние никогда не изменяется.