# -*- coding: utf-8 -*- import simplejson as json from django.shortcuts import get_object_or_404 from django.http import HttpResponseBadRequest, HttpResponse from django.views.decorators.http import require_POST from django.views.decorators.csrf import csrf_protect from django.contrib.auth.decorators import login_required from .. import models, forms @login_required def clients_get_ajax(request, id): """Получить контрагента - AJAX. Если в форме редактирования контрагента задан атрибут Meta.fields, то дампит только поля, перечисленные в нём. Иначе дампит вообще все поля, которые есть в модели. """ if not request.is_ajax(): return HttpResponseBadRequest() try: fields_list = forms.ClientForm.Meta.fields except AttributeError: fields_list = [] client = get_object_or_404(models.Client.objects.values(*fields_list), pk=id, user=request.user) return HttpResponse(json.dumps(client), mimetype='application/json') @login_required @require_POST @csrf_protect def clients_add_ajax(request): """Добавить контрагента - AJAX.""" form_class = forms.ClientForm if not request.is_ajax(): return HttpResponseBadRequest() form = form_class(data=request.POST) if form.is_valid(): new_client = form.save(commit=False) new_client.user = request.user new_client.save() non_field_errors = form.non_field_errors() if not form.is_valid(): non_field_errors.append(u'Заполните/исправьте выделенные поля.') data = { 'success': form.is_valid(), 'field_errors': form.errors, # ошибки полей 'form_errors': non_field_errors, # ошибки формы 'reload': form.is_valid() and 'reload_on_success' in request.GET } return HttpResponse(json.dumps(data), mimetype='application/json') @login_required @require_POST @csrf_protect def clients_edit_ajax(request, id): """Редактировать контрагента - AJAX.""" form_class = forms.ClientForm if not request.is_ajax(): return HttpResponseBadRequest() client = get_object_or_404(models.Client, pk=id, user=request.user) form = form_class(data=request.POST, instance=client) if form.is_valid(): form.save() non_field_errors = form.non_field_errors() if not form.is_valid(): non_field_errors.append(u'Заполните/исправьте выделенные поля.') data = { 'success': form.is_valid(), 'field_errors': form.errors, # ошибки полей 'form_errors': non_field_errors, # ошибки формы 'reload': form.is_valid() and 'reload_on_success' in request.GET } return HttpResponse(json.dumps(data), mimetype='application/json') @login_required @require_POST @csrf_protect def clients_delete_ajax(request, id): """Удалить контрагента - AJAX.""" if not request.is_ajax(): return HttpResponseBadRequest() client = get_object_or_404(models.Client, pk=id, user=request.user) client.delete() # TODO обработать ошибки удаления data = { 'success': True, 'message': {'title': 'Инфо', 'msg': 'Контрагент удалён.',}, 'reload': 'reload_on_success' in request.GET } return HttpResponse(json.dumps(data), mimetype='application/json')