fixed onvalidation for SQLFORM, issue 778, thanks Carlos Galindo
This commit is contained in:
@@ -1 +1 @@
|
|||||||
Version 1.99.7 (2012-05-02 16:03:22) dev
|
Version 1.99.7 (2012-05-02 16:08:31) dev
|
||||||
|
|||||||
@@ -1812,6 +1812,9 @@ class FORM(DIV):
|
|||||||
self.latest = Storage()
|
self.latest = Storage()
|
||||||
self.accepted = None # none for not submitted
|
self.accepted = None # none for not submitted
|
||||||
|
|
||||||
|
def assert_status(self, status, request_vars):
|
||||||
|
return status
|
||||||
|
|
||||||
def accepts(
|
def accepts(
|
||||||
self,
|
self,
|
||||||
request_vars,
|
request_vars,
|
||||||
@@ -1851,6 +1854,7 @@ class FORM(DIV):
|
|||||||
status = False
|
status = False
|
||||||
self.record_changed = True
|
self.record_changed = True
|
||||||
status = self._traverse(status,hideerror)
|
status = self._traverse(status,hideerror)
|
||||||
|
status = self.assert_status(status, request_vars)
|
||||||
if onvalidation:
|
if onvalidation:
|
||||||
if isinstance(onvalidation, dict):
|
if isinstance(onvalidation, dict):
|
||||||
onsuccess = onvalidation.get('onsuccess', None)
|
onsuccess = onvalidation.get('onsuccess', None)
|
||||||
|
|||||||
+19
-17
@@ -706,6 +706,25 @@ class SQLFORM(FORM):
|
|||||||
ID_LABEL_SUFFIX = '__label'
|
ID_LABEL_SUFFIX = '__label'
|
||||||
ID_ROW_SUFFIX = '__row'
|
ID_ROW_SUFFIX = '__row'
|
||||||
|
|
||||||
|
def assert_status(self, status, request_vars):
|
||||||
|
if not status and self.record and self.errors:
|
||||||
|
### if there are errors in update mode
|
||||||
|
# and some errors refers to an already uploaded file
|
||||||
|
# delete error if
|
||||||
|
# - user not trying to upload a new file
|
||||||
|
# - there is existing file and user is not trying to delete it
|
||||||
|
# this is because removing the file may not pass validation
|
||||||
|
for key in self.errors.keys():
|
||||||
|
if key in self.table \
|
||||||
|
and self.table[key].type == 'upload' \
|
||||||
|
and request_vars.get(key, None) in (None, '') \
|
||||||
|
and self.record[key] \
|
||||||
|
and not key + UploadWidget.ID_DELETE_SUFFIX in request_vars:
|
||||||
|
del self.errors[key]
|
||||||
|
if not self.errors:
|
||||||
|
status = True
|
||||||
|
return status
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
table,
|
table,
|
||||||
@@ -1111,23 +1130,6 @@ class SQLFORM(FORM):
|
|||||||
hideerror=hideerror,
|
hideerror=hideerror,
|
||||||
)
|
)
|
||||||
|
|
||||||
if not ret and self.record and self.errors:
|
|
||||||
### if there are errors in update mode
|
|
||||||
# and some errors refers to an already uploaded file
|
|
||||||
# delete error if
|
|
||||||
# - user not trying to upload a new file
|
|
||||||
# - there is existing file and user is not trying to delete it
|
|
||||||
# this is because removing the file may not pass validation
|
|
||||||
for key in self.errors.keys():
|
|
||||||
if key in self.table \
|
|
||||||
and self.table[key].type == 'upload' \
|
|
||||||
and request_vars.get(key, None) in (None, '') \
|
|
||||||
and self.record[key] \
|
|
||||||
and not key + UploadWidget.ID_DELETE_SUFFIX in request_vars:
|
|
||||||
del self.errors[key]
|
|
||||||
if not self.errors:
|
|
||||||
ret = True
|
|
||||||
|
|
||||||
self.deleted = \
|
self.deleted = \
|
||||||
request_vars.get(self.FIELDNAME_REQUEST_DELETE, False)
|
request_vars.get(self.FIELDNAME_REQUEST_DELETE, False)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user