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)