[Django] モデルのsave()でエラー発生。解決方法は?

Djangoモデルエラー

Djangoでモデルをsave()しようとしたら ValueError: invalid literal for int() with base 10: '' というエラーが出て苦しんだ話です。

 

モデル

[code]
class Bank(models.Model):
    user = models.ForeignKey(MainUser,default=1,on_delete=models.CASCADE)
    name = models.CharField(max_length=20, default='XX銀行' ,blank=False)
    branch_name = models.CharField(max_length=20, default='XX支店' ,blank=False)
    account_number = models.IntegerField( default='' ,blank=True)
    account_name = models.CharField(max_length=20, default='性 名' ,blank=False)

    def __str__(self):
        return "ID:{} 名前:{} 銀行名:{} 支店名:{} 口座番号:{}".format(self.user.pk,self.account_name,self.name,self.branch_name,self.account_number)
[/code]

実行したエラーが出るコードはこちら

[code]

bank = Bank()
bank.save()

[/code]

Bank()を作成して保存するだけの簡単なものです。

 

ちなみに初期値を設定したこちらは大丈夫でした。

[code]

bank = Bank()
bank.account_number = 1234567
bank.save()

[/code]

何がいけないのかとしばらく悩みに悩んで凡ミスに気づきましたΣ(゚∀゚ノ)ノキャー

[code]

account_number = models.IntegerField( default=” ,blank=True)

[/code]

default=''デフォルトがstringで何も値が入っている!!

ValueError: invalid literal for int() with base 10: ''

まさにメッセージ通りでした。'' の意味を理解していませんでした(;´∀`)

ここになにか文字が入っていたら一瞬で気付けたのでしょうが…

DjangoのモデルでIntegerFieldを宣言するときの注意

blank=True と null=True のどちらかを設定したときに初期値を入れないと勝手に '' ←何も値がないString

ValueError: invalid literal for int() with base 10: '' が出ます。

なので入力を任意にしたい。デフォルトを空欄にしたい場合は argument=None を引数に設定すれば良いそうです。

↓下記参照

Django throwing “invalid literal for int() with base 10: ”” when trying to save object attribute

 

まとめ

DjangoのモデルでIntegerFieldを宣言する時は下記のことに気をつけましょう。

【デフォルトを空欄、任意の入力にしたい場合】

[code]
models.IntegerField( argument=None)
[/code]

【デフォルトを設定する場合】

[code]
models.IntegerField( default=数字,blank=False)
[/code]

当たり前過ぎて何も言えません。

 

皆さんはこんな凡ミスをしないようにお気をつけください(^^)/

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください