Hello,
I want to store costs (prices) in my DB. The obvious field type is
Integer, storing the cost in cents (strings prevent arithmetic
operations, floats are entirely inappropriate).
For input via a form, I have a nice CostField defined as follows:
class CostField(forms.CharField):
def validate(self, value):
super(CostField, self).validate(value)
if not re.match(r'^\d+(\.\d\d)?$', value):
raise forms.ValidationError("Enter a price in the form
1.50")
def clean(self, value):
value = super(CostField, self).clean(value)
return float(value) * 100
So it starts as a CharField, gets validated appropriately and then
converted to the cents-only equivalent.
But for output in templates, I have not found an elegant solution.
Currently I am using this:
def h_price(price):
dollars = price / 100
cents = str(price % 100)
if len(cents) == 1:
cents = '0%s' % cents
return '%s.%s' % (dollars, cents)
class Whatever(models.Model):
price = models.IntegerField()
@property
def h_price(self):
return h_price(self.price)
But the problem is that I need obviously to repeat the property
definition for every usage of money in the schema.
I tried creating a custom field as follows:
class CostField(models.IntegerField):
def h(self):
return 'hello'
and using this in a template like this: {{ item.price.h }}
But this doesn't work, it doesn't even call my h() function.
Can anyone point me in the right direction?
Thankyou :-)
Darren
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to [email protected].
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.