0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Python(Django) x Docker x AWSAdvent Calendar 2023

Day 8

【Django】エラー "['“” value must be a decimal number.']" の原因と解決方法

Posted at

エラー内容

Djangoアプリケーションを実装していたら以下のエラーに遭遇しました。
本記事ではこちらの原因と解決方法を記載します。

['“” value must be a decimal number.']

原因と解決方法

原因は、DecimalFieldは空白文字列を有効なDecimal値に変換できないため。
サンプルコードを交えて説明します。

サンプルコード

models.py
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.」(このフィールドは必須です)などのエラーメッセージが発生します。

この辺は以下の記事が分かりやすかったのでご参考までに。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?