DjangoでFloatFieldを小数点以下2桁に制限する方法を探しています。DecimalFieldを使用せずにこれを行う方法の手掛かりを誰かが持っています。
私は試した decimal_places=2
but floatフィールド内での移行エラーが発生しただけなので、このメソッドはDecimalFields内でのみ機能する必要があると思います。
FloatField
がフォームにどのように表示されるかだけに関心がある場合は、テンプレートフィルター floatformat
を使用できます。
Djangoドキュメントから:
数値整数引数とともに使用した場合、floatformatは数値をその小数点以下の桁数に丸めます。
たとえば、値= 34.23234の場合、テンプレートでは次のようになります。
{{ value|floatformat:2 }} # outputs 34.23
テンプレート内のモデルの表示を変更するだけでなく、モデルが常に小数点以下2桁のみで保存されるようにしたい場合は、モデルのカスタム保存メソッドが適切に機能します。以下のサンプルモデルは、その方法を示しています。
class MyDataModel(models.Model):
my_float = models.FloatField()
def save(self, *args, **kwargs):
self.my_float = round(self.my_float, 2)
super(MyDataModel, self).save(*args, **kwargs)
これで、モデルを保存するたびに、フィールドに小数点以下2桁の浮動小数点のみが入力されることが保証されます。これは一般化して、小数点以下の桁数を四捨五入することができます。
Django 1.8+なので、FloatFieldまたは任意のModelFieldsにカスタムバリデーターを使用できます:
def validate_decimals(value):
try:
return round(float(value), 2)
except:
raise ValidationError(
_('%(value)s is not an integer or a float number'),
params={'value': value},
)
...そしてあなたのモデルでは次のように適用できます:
from Django.db import models
class MyModel(models.Model):
even_field = models.FloatField(validators=[validate_decimals])