Merge pull request #352 from viniciusban/empty_reference_field

Allow empty reference field in form without IS_EMPTY_OR() validator, avoiding constraint violation exception.
This commit is contained in:
mdipierro
2014-01-18 10:37:39 -08:00
+14 -2
View File
@@ -1535,8 +1535,20 @@ class SQLFORM(FORM):
if not value is None:
fields[fieldname] = safe_int(value)
elif field.type.startswith('reference'):
if not value is None and isinstance(self.table, Table) and not keyed:
fields[fieldname] = safe_int(value)
## Avoid "constraint violation" exception when you have a
## optional reference field without the dropdown in form. I.e.,
## a field with code to be typed, in a data-entry form.
##
## When your reference field doesn't have IS_EMPTY_OR()
## validator, "value" will come here as a string. So,
## safe_int() will return 0. In this case, insert will raise
## the constraint violation because there's no id=0 in
## referenced table.
if isinstance(self.table, Table) and not keyed:
if not value:
fields[fieldname] = None
else:
fields[fieldname] = safe_int(value)
elif field.type == 'double':
if not value is None:
fields[fieldname] = safe_float(value)