user3684314 user3684314 - 1 month ago 5
Python Question

Update Database Using AJAX in Django

So I have an AJAX command, which passes information to a views.py method (I have verified that the passing works from the HTML->urls.py->views.py, so that's all good), but once I have it in "views.py", I have no idea how to get it to update in the database itself.

I have tried to avoid using a forms.py file if possible, but if that is the only option I'll bend to it.

The AJAX function is as follows:

$.ajax({
url : '/perform/acts/update/{{ act.id }}/',
type : "POST",
data : {
'csrfmiddlewaretoken' : "{{ csrf_token }}",
furtherData : furtherData
},
success : function(result) {}
});


The views.py function is...so far, lacking, to say the least, but this is where I'm sort of lost:

def update_act(request, furtherData_id):
if request.method == 'POST':
?
return HttpResponse(?)


A big reason for doing this this way was performing updates without reloading and without having to add another module. I have been using Django for only a couple weeks, so it could be something easy that I'm missing...

Any help much appreciated!

Answer

Your view function:

def my_view_action(request, any_pk_id):
    from django.http import JsonResponse
    if request.method=='POST' and request.is_ajax():
        try:
            obj = MyModel.objects.get(pk=any_pk_id)
            obj.data_attr = request.POST['attr_name']
            obj.save()
            return JsonResponse({'result': 'save successfully'})
         except MyModel.DoesNotExist:
            return JsonResponse({'error': 'Object does not exist'})
     else:
         return JsonResponse({'result':'Not a valid request'}


For more info https://docs.djangoproject.com/en/1.10/topics/forms/modelforms/#the-save-method