On Sat, 2008-09-27 at 18:07 +0200, Gerard Petersen wrote: > Dear Django team, > > It seems, but since I'm human it could be me, that in a modelform with a > forms.DecimalField declaration the min_value is not picked up when it has > decimals in it. The snippet: > > per_price = forms.DecimalField( > label='Per Price', > min_value=0.01, > decimal_places=2 > ) > > I want to force a 'value > 0'. A value of '1' works but that defies the > purpose of having 2 decimal_places. Note: a value of 0.01 for "initial=.." > does work.
It's kind of a small inconsistency that a float is allowed for an initial value there. The fact is, this is a DecimalField, so using floats is something you should avoid doing. In Python, the following holds: >>> Decimal('0.05') < 0.1 False In other words, decimals and floats do not compare as you might expect (since you cannot reliably convert a float to an exact decimal value). Instead, you should be passing in a Decimal instance for the minimum value: min_val = Decimal('0.01') and then it will work. Internally, Django has already converted the input value to a Decimal instance and is then using '<' and '>' to compare against min_value and max_value, so it needs to be comparing similar types. Regards, Malcolm --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---