エラー内容
Djangoアプリケーションを実装していたら以下のエラーに遭遇しました。
本記事ではこちらの原因と解決方法を記載します。
['“” value must be a decimal number.']
原因と解決方法
原因は、DecimalField
は空白文字列を有効なDecimal
値に変換できないため。
サンプルコードを交えて説明します。
サンプルコード
class Sample(models.Model):
sample_char = models.CharField(max_length=100, null=True, blank=True)
sample_integer = models.IntegerField(null=True, blank=True)
sample_decimal = models.DecimalField(max_digits=3, decimal_places=1, null=True, blank=True)
上記のmodels.py
を作成した後、以下内容を実行します。
from response.models import Sample
from decimal import Decimal
instance = Sample(sample_decimal='')
instance.save()
すると結果は以下になりました。
django.core.exceptions.ValidationError: ['“” value must be a decimal number.']
sample_decimal
フィールドは、DecimalField
なので空白値を許容しません。
そのため、もし空白値を指定したい場合はNone
を使います。するとエラーは無くなります。
ちなみに、Integer
も空白値を入れるとエラーになりますが、
こちらのほうがエラーメッセージが丁寧です...フィールド名まで教えてくれます
ValueError: Field 'sample_integer' expected a number but got ''.
ちなみにblank='True'
というのは、「Djangoのフォームからの投稿が空かどうかを判定するもの」です。False
(デフォルト)だとそのフィールドが必須であることを示します。
「This field is required.」(このフィールドは必須です)などのエラーメッセージが発生します。
この辺は以下の記事が分かりやすかったのでご参考までに。