Storing Measurement Objects¶
Suppose you were trying to cut back on drinking, and needed to store a log of how much beer you drink day-to-day; you might (naively) create a model like such:
from measurement.measures import Volume from django_measurement.fields import MeasurementField from django.db import models class BeerConsumptionLogEntry(models.Model): name = models.CharField(max_length=255) volume = MeasurementField(Volume) def __str__(self): return '%s of %s' % (self.name, self.volume)
and assume you had a pint of Ninkasi’s Total Domination; you’d add it to your log like so:
from measurement.measures import Volume beer = BeerConsumptionLogEntry() beer.name = 'Total Domination' beer.volume = Volume(us_pint=1) beer.save() print beer # '1 us_pint of Total Domination'
Perhaps you next recklessly dove into your stash of terrible, but nostalgia-inducing Russian beer and had a half-liter of Baltika’s #9; you’d add it to your log like so:
another_beer = BeerConsumptionLogEntry() another_beer.name = '#9' another_beer.volume = Volume(l=0.5) another_beer.save() print beer # '0.5 l of #9'
Note that although the original unit specified is stored for display, that the unit is abstracted to the measure’s standard unit for storage and comparison:
print beer.volume # '1 us_pint' print another_beer.volume # '0.5 l' print beer.volume > another_beer.volume # False
How is this data stored?¶
Since django-measurement v2.0 there value will be stored in a single float field.