diff --git a/assets/js/build/create_worksell.js b/assets/js/build/create_worksell.js index b66a6ff..c37df27 100644 --- a/assets/js/build/create_worksell.js +++ b/assets/js/build/create_worksell.js @@ -56,6 +56,8 @@ var _ajax_registration = __webpack_require__(9); + var _ajax_send_form_data = __webpack_require__(12); + $(function () { // fileUploadInit(); // previewImg(); @@ -64,6 +66,8 @@ (0, _popups.showPopupsInit)(); (0, _ajax_registration.ajaxRegistrationInit)('contractor'); window.addMessage = _popups.addMessage; + window.sendFormData = _ajax_send_form_data.sendFormData; + window.scrollOnRequiredInit = _scroll_on_required.scrollOnRequiredInit; }); /***/ }, @@ -412,5 +416,79 @@ exports.imageUploadInit = imageUploadInit; // export {imageUploadInit, previewImg} +/***/ }, +/* 12 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.sendFormData = undefined; + + var _utils = __webpack_require__(2); + + function sendFormData(e) { + e.preventDefault(); + // console.log("send dat later"); + var $target = $(e.target); + var $form = $target.closest("form"); + // console.log("actions = ", $form.attr("action")); + // let url = $form.attr("action"); + // let formData = $form.serializeArray(); + var formData = new FormData($form[0]); + $.ajax({ + url: $form.attr("action"), + data: formData, + async: false, + method: $form.attr("method"), + beforeSend: function beforeSend(xhr) { + xhr.setRequestHeader("X-CSRFToken", (0, _utils.getCookie)('csrftoken')); + }, + success: function success(data) { + // console.log("success xhr -->", xhr); + // let data = xhr.responseJSON; + // console.log('success data -->', data); + // console.log('success data -->', data.redirect_to); + window.location.href = data.redirect_to; + }, + cache: false, + contentType: false, + processData: false, + error: function error(xhr, ajaxOptions, thrownError) { + var status = xhr.status; + $('.error').removeClass('error'); + // console.log('error data -->', xhr.responseJSON); + if (status == 400) { + // let data = JSON.parse(xhr.responseText); + var data = xhr.responseJSON; + $.each(data, function (key, value) { + // let ul = $(""); + // for (let error of value) { + // ul.append(`
  • ${error}
  • `) + // } + // console.log("key = ", key, "value =", value); + var $header = $form.find("[name=" + key + "]").siblings('.required'); + // console.log("$header = ", $header); + if ($header.length > 0) { + $header.addClass("error"); + } + }); + window.scrollOnRequiredInit(); + // console.log('captcha error = ', data.captcha); + // console.log('data type = ', typeof data); + } else { + console.log('xhr = ', xhr); + } + } + }); + // $.post(url, formData).done(function (data) { + // alert(data); + // }); + } + + exports.sendFormData = sendFormData; + /***/ } /******/ ]); \ No newline at end of file diff --git a/assets/js/build/home_page.js b/assets/js/build/home_page.js index c3b82b6..165e170 100644 --- a/assets/js/build/home_page.js +++ b/assets/js/build/home_page.js @@ -47,7 +47,7 @@ 'use strict'; - var _popupYoutube = __webpack_require__(12); + var _popupYoutube = __webpack_require__(13); $(function () { (0, _popupYoutube.popupYoutubeInit)(); @@ -55,7 +55,7 @@ /***/ }, -/***/ 12: +/***/ 13: /***/ function(module, exports) { 'use strict'; diff --git a/assets/js/build/init_create_worksell.js b/assets/js/build/init_create_worksell.js index 6dd5766..335f2e0 100644 --- a/assets/js/build/init_create_worksell.js +++ b/assets/js/build/init_create_worksell.js @@ -46,27 +46,27 @@ 'use strict'; - var _SelectedContainer = __webpack_require__(13); + var _SelectedContainer = __webpack_require__(14); var _SelectedContainer2 = _interopRequireDefault(_SelectedContainer); - var _SelectedContainerCreate = __webpack_require__(17); + var _SelectedContainerCreate = __webpack_require__(18); var _SelectedContainerCreate2 = _interopRequireDefault(_SelectedContainerCreate); - var _NoTreeSelect = __webpack_require__(18); + var _NoTreeSelect = __webpack_require__(19); var _NoTreeSelect2 = _interopRequireDefault(_NoTreeSelect); - var _TreeSelect = __webpack_require__(20); + var _TreeSelect = __webpack_require__(21); var _TreeSelect2 = _interopRequireDefault(_TreeSelect); - var _SingleTreeSelect = __webpack_require__(21); + var _SingleTreeSelect = __webpack_require__(22); var _SingleTreeSelect2 = _interopRequireDefault(_SingleTreeSelect); - var _SelectOrCreate = __webpack_require__(22); + var _SelectOrCreate = __webpack_require__(23); var _SelectOrCreate2 = _interopRequireDefault(_SelectOrCreate); @@ -179,7 +179,8 @@ /* 10 */, /* 11 */, /* 12 */, -/* 13 */ +/* 13 */, +/* 14 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -194,15 +195,15 @@ var _desc, _value, _class; // ` - var _DataTree = __webpack_require__(14); + var _DataTree = __webpack_require__(15); var _DataTree2 = _interopRequireDefault(_DataTree); - var _NoTreeData = __webpack_require__(15); + var _NoTreeData = __webpack_require__(16); var _NoTreeData2 = _interopRequireDefault(_NoTreeData); - var _decorators = __webpack_require__(16); + var _decorators = __webpack_require__(17); var _decorators2 = _interopRequireDefault(_decorators); @@ -433,7 +434,7 @@ exports.default = SelectedContainer; /***/ }, -/* 14 */ +/* 15 */ /***/ function(module, exports) { "use strict"; @@ -588,7 +589,7 @@ exports.default = DataTree; /***/ }, -/* 15 */ +/* 16 */ /***/ function(module, exports) { "use strict"; @@ -644,7 +645,7 @@ exports.default = NoTreeData; /***/ }, -/* 16 */ +/* 17 */ /***/ function(module, exports) { "use strict"; @@ -728,7 +729,7 @@ // export {onBind}; /***/ }, -/* 17 */ +/* 18 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -744,11 +745,11 @@ var _desc, _value, _class; - var _SelectedContainer2 = __webpack_require__(13); + var _SelectedContainer2 = __webpack_require__(14); var _SelectedContainer3 = _interopRequireDefault(_SelectedContainer2); - var _decorators = __webpack_require__(16); + var _decorators = __webpack_require__(17); var _decorators2 = _interopRequireDefault(_decorators); @@ -829,7 +830,7 @@ exports.default = SelectedContainerCreate; /***/ }, -/* 18 */ +/* 19 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -843,9 +844,9 @@ var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - var _AbsBaseSelect2 = __webpack_require__(19); + var _AbsBaseSelect2 = __webpack_require__(20); - var _NoTreeData = __webpack_require__(15); + var _NoTreeData = __webpack_require__(16); var _NoTreeData2 = _interopRequireDefault(_NoTreeData); @@ -912,7 +913,7 @@ exports.default = NoTreeSelect; /***/ }, -/* 19 */ +/* 20 */ /***/ function(module, exports) { "use strict"; @@ -1456,7 +1457,7 @@ exports.AbsBaseSelect = AbsBaseSelect; /***/ }, -/* 20 */ +/* 21 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -1470,9 +1471,9 @@ var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - var _AbsBaseSelect2 = __webpack_require__(19); + var _AbsBaseSelect2 = __webpack_require__(20); - var _DataTree = __webpack_require__(14); + var _DataTree = __webpack_require__(15); var _DataTree2 = _interopRequireDefault(_DataTree); @@ -1581,7 +1582,7 @@ exports.default = TreeSelect; /***/ }, -/* 21 */ +/* 22 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -1593,9 +1594,9 @@ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - var _AbsBaseSelect = __webpack_require__(19); + var _AbsBaseSelect = __webpack_require__(20); - var _TreeSelect2 = __webpack_require__(20); + var _TreeSelect2 = __webpack_require__(21); var _TreeSelect3 = _interopRequireDefault(_TreeSelect2); @@ -1676,7 +1677,7 @@ exports.default = SingleTreeSelect; /***/ }, -/* 22 */ +/* 23 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -1690,9 +1691,9 @@ var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - var _AbsBaseSelect2 = __webpack_require__(19); + var _AbsBaseSelect2 = __webpack_require__(20); - var _NoTreeData = __webpack_require__(15); + var _NoTreeData = __webpack_require__(16); var _NoTreeData2 = _interopRequireDefault(_NoTreeData); diff --git a/assets/js/build/init_customer_project_create.js b/assets/js/build/init_customer_project_create.js index 39cfa5d..04e6fed 100644 --- a/assets/js/build/init_customer_project_create.js +++ b/assets/js/build/init_customer_project_create.js @@ -46,27 +46,27 @@ 'use strict'; - var _SelectedContainer = __webpack_require__(13); + var _SelectedContainer = __webpack_require__(14); var _SelectedContainer2 = _interopRequireDefault(_SelectedContainer); - var _SelectedContainerCreate = __webpack_require__(17); + var _SelectedContainerCreate = __webpack_require__(18); var _SelectedContainerCreate2 = _interopRequireDefault(_SelectedContainerCreate); - var _NoTreeSelect = __webpack_require__(18); + var _NoTreeSelect = __webpack_require__(19); var _NoTreeSelect2 = _interopRequireDefault(_NoTreeSelect); - var _TreeSelect = __webpack_require__(20); + var _TreeSelect = __webpack_require__(21); var _TreeSelect2 = _interopRequireDefault(_TreeSelect); - var _SingleTreeSelect = __webpack_require__(21); + var _SingleTreeSelect = __webpack_require__(22); var _SingleTreeSelect2 = _interopRequireDefault(_SingleTreeSelect); - var _SelectOrCreate = __webpack_require__(22); + var _SelectOrCreate = __webpack_require__(23); var _SelectOrCreate2 = _interopRequireDefault(_SelectOrCreate); @@ -214,7 +214,8 @@ /* 10 */, /* 11 */, /* 12 */, -/* 13 */ +/* 13 */, +/* 14 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -229,15 +230,15 @@ var _desc, _value, _class; // ` - var _DataTree = __webpack_require__(14); + var _DataTree = __webpack_require__(15); var _DataTree2 = _interopRequireDefault(_DataTree); - var _NoTreeData = __webpack_require__(15); + var _NoTreeData = __webpack_require__(16); var _NoTreeData2 = _interopRequireDefault(_NoTreeData); - var _decorators = __webpack_require__(16); + var _decorators = __webpack_require__(17); var _decorators2 = _interopRequireDefault(_decorators); @@ -468,7 +469,7 @@ exports.default = SelectedContainer; /***/ }, -/* 14 */ +/* 15 */ /***/ function(module, exports) { "use strict"; @@ -623,7 +624,7 @@ exports.default = DataTree; /***/ }, -/* 15 */ +/* 16 */ /***/ function(module, exports) { "use strict"; @@ -679,7 +680,7 @@ exports.default = NoTreeData; /***/ }, -/* 16 */ +/* 17 */ /***/ function(module, exports) { "use strict"; @@ -763,7 +764,7 @@ // export {onBind}; /***/ }, -/* 17 */ +/* 18 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -779,11 +780,11 @@ var _desc, _value, _class; - var _SelectedContainer2 = __webpack_require__(13); + var _SelectedContainer2 = __webpack_require__(14); var _SelectedContainer3 = _interopRequireDefault(_SelectedContainer2); - var _decorators = __webpack_require__(16); + var _decorators = __webpack_require__(17); var _decorators2 = _interopRequireDefault(_decorators); @@ -864,7 +865,7 @@ exports.default = SelectedContainerCreate; /***/ }, -/* 18 */ +/* 19 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -878,9 +879,9 @@ var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - var _AbsBaseSelect2 = __webpack_require__(19); + var _AbsBaseSelect2 = __webpack_require__(20); - var _NoTreeData = __webpack_require__(15); + var _NoTreeData = __webpack_require__(16); var _NoTreeData2 = _interopRequireDefault(_NoTreeData); @@ -947,7 +948,7 @@ exports.default = NoTreeSelect; /***/ }, -/* 19 */ +/* 20 */ /***/ function(module, exports) { "use strict"; @@ -1491,7 +1492,7 @@ exports.AbsBaseSelect = AbsBaseSelect; /***/ }, -/* 20 */ +/* 21 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -1505,9 +1506,9 @@ var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - var _AbsBaseSelect2 = __webpack_require__(19); + var _AbsBaseSelect2 = __webpack_require__(20); - var _DataTree = __webpack_require__(14); + var _DataTree = __webpack_require__(15); var _DataTree2 = _interopRequireDefault(_DataTree); @@ -1616,7 +1617,7 @@ exports.default = TreeSelect; /***/ }, -/* 21 */ +/* 22 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -1628,9 +1629,9 @@ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - var _AbsBaseSelect = __webpack_require__(19); + var _AbsBaseSelect = __webpack_require__(20); - var _TreeSelect2 = __webpack_require__(20); + var _TreeSelect2 = __webpack_require__(21); var _TreeSelect3 = _interopRequireDefault(_TreeSelect2); @@ -1711,7 +1712,7 @@ exports.default = SingleTreeSelect; /***/ }, -/* 22 */ +/* 23 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -1725,9 +1726,9 @@ var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; - var _AbsBaseSelect2 = __webpack_require__(19); + var _AbsBaseSelect2 = __webpack_require__(20); - var _NoTreeData = __webpack_require__(15); + var _NoTreeData = __webpack_require__(16); var _NoTreeData2 = _interopRequireDefault(_NoTreeData); diff --git a/assets/js/src/create_worksell.js b/assets/js/src/create_worksell.js index b16ce5e..458ea2d 100644 --- a/assets/js/src/create_worksell.js +++ b/assets/js/src/create_worksell.js @@ -1,15 +1,15 @@ -import {fileUploadInit} from './seeds/file_upload' import {imageUploadInit} from './seeds/image_upload' import {scrollOnRequiredInit} from './seeds/scroll_on_required' import {showPopupsInit, addMessage} from './seeds/popups' import {ajaxRegistrationInit} from './seeds/ajax_registration' +import {sendFormData} from './seeds/ajax_send_form_data' $(function () { - // fileUploadInit(); - // previewImg(); imageUploadInit(); scrollOnRequiredInit(); showPopupsInit(); ajaxRegistrationInit('contractor'); window.addMessage = addMessage; + window.sendFormData = sendFormData; + window.scrollOnRequiredInit = scrollOnRequiredInit; }); \ No newline at end of file diff --git a/assets/js/src/seeds/ajax_send_form_data.js b/assets/js/src/seeds/ajax_send_form_data.js new file mode 100644 index 0000000..8a3c452 --- /dev/null +++ b/assets/js/src/seeds/ajax_send_form_data.js @@ -0,0 +1,49 @@ +import {getCookie} from '../utils' + +function sendFormData(e) { + e.preventDefault(); + let $target = $(e.target); + let $form = $target.closest("form"); + // let formData = $form.serializeArray(); + let formData = new FormData($form[0]); + $.ajax({ + url: $form.attr("action"), + data: formData, + async: false, + method: $form.attr("method"), + beforeSend: function (xhr) { + xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')) + }, + success: function (data) { + // let data = xhr.responseJSON; + // console.log('success data -->', data); + window.location.href = data.redirect_to; + + }, + cache: false, + contentType: false, + processData: false, + error: function (xhr, ajaxOptions, thrownError) { + let status = xhr.status; + $('.error').removeClass('error'); + if (status == 400) { + let data = xhr.responseJSON; + $.each(data, function (key, value) { + let $header = $form.find(`[name=${key}]`).siblings('.required'); + if ($header.length > 0) { + $header.addClass("error"); + } + + }); + window.scrollOnRequiredInit(); + }else{ + console.log('xhr = ', xhr); + } + } + }); + // $.post(url, formData).done(function (data) { + // alert(data); + // }); +} + +export {sendFormData} \ No newline at end of file diff --git a/work_sell/templates/worksell_create.html b/work_sell/templates/worksell_create.html index 9e79e45..7f7d8d4 100644 --- a/work_sell/templates/worksell_create.html +++ b/work_sell/templates/worksell_create.html @@ -58,6 +58,8 @@
    Тип готовой работы
    Обязательно + {# Для поиска заголовка обязательного поля по name= #} +
    @@ -102,7 +104,7 @@
    Обязательно - @@ -191,6 +193,7 @@
    @@ -216,18 +219,6 @@
    - {#
    #} - {#
    #} - {#
     
    #} - {# #} - {#
    #} - {#
    #} - {#
     
    #} - {# #} - {#
    #}
    diff --git a/work_sell/views.py b/work_sell/views.py index b19916c..20f621a 100644 --- a/work_sell/views.py +++ b/work_sell/views.py @@ -29,7 +29,6 @@ from .serialize import serialize from .response import JSONResponse, response_mimetype - class PictureCreateView(CreateView): model = Picture fields = '__all__' @@ -203,10 +202,12 @@ class WorkSellCreateView(BaseMixin, View): return render(request, self.template_name, context) def post(self, request, *args, **kwargs): - form = self.form_class(request.POST, request=request) # Passing `request.FILES` seems unnecessary here. Files are added manually below - # TODO: fix it on front + # print("request.POST = ", request.POST) + # print("files = ", request.FILES.getlist('new_files')) + request.POST = request.POST.copy() # Если фронт не будет возвращать пустую строку при незаполненных данных, то if'ы будут не нужны if request.POST.get('specializations') == "": + print("POP") request.POST.pop('specializations') else: request.POST.setlist('specializations', request.POST.get('specializations', "").split(',')) @@ -215,8 +216,7 @@ class WorkSellCreateView(BaseMixin, View): request.POST.pop('el_format') else: request.POST.setlist('el_format', request.POST.get('el_format', "").split(',')) - - # print("POST before = ", request.POST) + form = self.form_class(request.POST, request=request) if form.is_valid(): work_sell = form.save(commit=False) unregister_user = request.POST.get('not_auth_user_id') @@ -231,8 +231,10 @@ class WorkSellCreateView(BaseMixin, View): for file, desc in zip(request.FILES.getlist('new_files'), request.POST.getlist('img_description')): WorkSellPhoto.objects.create(img=file, description=desc, worksell=work_sell) - messages.info(request, 'Работа успешно создана') redirect_to = reverse('work_sell:detail', kwargs={'pk': work_sell.pk}) + if request.is_ajax(): + return JsonResponse({'redirect_to': redirect_to}, status=200) + messages.info(request, 'Работа успешно создана') return redirect(redirect_to) else: if form.errors: @@ -243,7 +245,9 @@ class WorkSellCreateView(BaseMixin, View): context = self.get_context_data(**kwargs) context.update({'form': form}) - # context.update({'photos': WorkSellPhoto.objects.filter(worksell__id=)}) + if request.is_ajax(): + data = json.dumps(form.errors) + return HttpResponse(content=data, status=400, content_type='application/json') return render(request, self.template_name, context)