Using Measurement Objects in Forms¶
This is an example for a simple form field usage:
from django import forms
from django_measurement.forms import MeasurementField
class BeerForm(forms.Form):
volume = MeasurementField(Volume)
You can limit the units in the select field by using the ‘unit_choices’ keyword argument. To limit the value choices of the MeasurementField uses the regular ‘choices’ keyword argument:
class BeerForm(forms.Form):
volume = MeasurementField(
measurement=Volume,
unit_choices=(("l","l"), ("oz","oz")),
choices=((1.0, 'one'), (2.0, 'two'))
)
If unicode symbols are needed in the labels for a MeasurementField, define a LABELS dictionary for your subclassed MeasureBase object:
# -*- coding: utf-8 -*-
from sympy import S, Symbol
class Temperature(MeasureBase):
SU = Symbol('kelvin')
STANDARD_UNIT = 'k'
UNITS = {
'c': SU - S(273.15),
'f': (SU - S(273.15)) * S('9/5') + 32,
'k': 1.0
}
LABELS = {
'c':u'°C',
'f':u'°F',
'k':u'°K',
}
For a MeasurementField that represents a BidimensionalMeasure, you can set the separator either in settings.py (MEASUREMENT_BIDIMENSIONAL_SEPARATOR is ‘/’ by default, add setting to override for all BiDimensionalMeasure subclasses) or override for an individual field with the kwarg bidimensional_separator:
speed = MeasurementField(
measurement=Speed,
bidimensional_separator=' per '
)
# Rendered option labels will now be in the format "ft per s", "m per hr", etc