diff --git a/mongoengine/fields.py b/mongoengine/fields.py index 2635b817..036a00c2 100644 --- a/mongoengine/fields.py +++ b/mongoengine/fields.py @@ -304,7 +304,10 @@ class DecimalField(BaseField): return value # Convert to string for python 2.6 before casting to Decimal - value = decimal.Decimal("%s" % value) + try: + value = decimal.Decimal("%s" % value) + except decimal.InvalidOperation: + return value return value.quantize(self.precision, rounding=self.rounding) def to_mongo(self, value): diff --git a/tests/fields/fields.py b/tests/fields/fields.py index a9db8619..3d272181 100644 --- a/tests/fields/fields.py +++ b/tests/fields/fields.py @@ -384,6 +384,9 @@ class FieldTest(unittest.TestCase): person.height = 4.0 self.assertRaises(ValidationError, person.validate) + person_2 = Person(height='something invalid') + self.assertRaises(ValidationError, person_2.validate) + def test_decimal_validation(self): """Ensure that invalid values cannot be assigned to decimal fields. """ @@ -405,6 +408,11 @@ class FieldTest(unittest.TestCase): self.assertRaises(ValidationError, person.validate) person.height = Decimal('4.0') self.assertRaises(ValidationError, person.validate) + person.height = 'something invalid' + self.assertRaises(ValidationError, person.validate) + + person_2 = Person(height='something invalid') + self.assertRaises(ValidationError, person_2.validate) Person.drop_collection()