fixed issue 1339, faster IS_NOT_IN_DB
This commit is contained in:
1 parent
be2ef9b626
commit
4334ae38ed
2 files changed
+13
-9
No files matched your search
@@ -1 +1 @@
|
|||||||
Version 2.4.1-alpha.2+timestamp.2013.02.16.09.59.52
|
Version 2.4.1-alpha.2+timestamp.2013.02.17.00.59.22
|
||||||
+12
-8
@@ -629,14 +629,18 @@ class IS_NOT_IN_DB(Validator):
|
|||||||
(tablename, fieldname) = str(self.field).split('.')
|
(tablename, fieldname) = str(self.field).split('.')
|
||||||
table = self.dbset.db[tablename]
|
table = self.dbset.db[tablename]
|
||||||
field = table[fieldname]
|
field = table[fieldname]
|
||||||
rows = self.dbset(field == value, ignore_common_filters=self.ignore_common_filters).select(field, limitby=(0, 1))
|
subset = self.dbset(field == value,
|
||||||
if len(rows) > 0:
|
ignore_common_filters=self.ignore_common_filters)
|
||||||
if isinstance(self.record_id, dict):
|
id = self.record_id
|
||||||
for f in self.record_id:
|
if isinstance(id, dict):
|
||||||
if str(getattr(rows[0], f)) != str(self.record_id[f]):
|
fields = [table[f] for f in id]
|
||||||
return (value, translate(self.error_message))
|
row = subset.select(*fields, **dict(limitby=(0, 1))).first()
|
||||||
elif str(rows[0][table._id.name]) != str(self.record_id):
|
if row and any(str(row[f]) != str(id[f]) for f in id):
|
||||||
return (value, translate(self.error_message))
|
return (value, translate(self.error_message))
|
||||||
|
else:
|
||||||
|
row = subset.select(table._id, limitby=(0, 1)).first()
|
||||||
|
if row and str(row.id) != str(id):
|
||||||
|
return (value, translate(self.error_message))
|
||||||
return (value, None)
|
return (value, None)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user