DecimalField field does not attempt to coerce/convert values
If `auto_round` is set to `True` then peewee will call `str()` on the value before passing it into the `Decimal` constructor. Otherwise, peewee passes the value back to the database as-is.

On the other side, when loading values from the db into python, Peewee will convert the value to a string then pass it in to the Decimal constructor (if the value is not already a Decimal object).

Can you provide the specific example you're having trouble with?
 Yes, I see that the conversion happens when auto_round is set, but I was expecting it to also happen without auto_round. For example, given the following string input: "1" IntegerField, FloatField, etc will all coerce the value to their corresponding numeric representations, while DecimalField will send the string along to the DB/driver as is.

On the flip side, given the string input "garbage223", using IntegerField will throw an Exception while a DecimalField will send the value to the DB. I discovered this issue when I realized that bad data in a DecimalField was silently converted to 0.0000 by MySQL and a pymysql warning was printed to the log instead. It seems much more consistent to attempt the conversion in peewee just like with the other numeric fields so that users can handle all exceptions in the same way.

Basically instead of simply returning value, I would expect you to return decimal.Decimal(str(value))
 Actually, let me add that you should probably also check is_infinite() and is_nan() on the converted decimal values before returning or calling quantize().  Otherwise the strings "inf" and "nan" could cause trouble as well 
 > when I realized that bad data in a DecimalField was silently converted to 0.0000 by MySQL

Shit! That's certainly surprising. I think it's ok to blame the problem on MySQL rather than Peewee...or pymysql...something should have broken higher up the call-stack.

That being said, I think it makes sense to add logic to convert to Decimal object in Peewee's db_value() method, so I've gone ahead and done that. Also skip quantization when the value is something like NaN/Inf, etc.
I have noticed that unlike most other numeric fields, DecimalField does not attempt to coerce/convert values (e.g. strings) before inserting them into the database.  

Is there a specific reason for this or is it just an oversight. Seems like it would to be consistent with the behavior of IntegerField and FloatField