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()
Bank()を作成して保存するだけの簡単なものです。
ちなみに初期値を設定したこちらは大丈夫でした。
[code]bank = Bank()
bank.account_number = 1234567
bank.save()
何がいけないのかとしばらく悩みに悩んで凡ミスに気づきましたΣ(゚∀゚ノ)ノキャー
[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]
当たり前過ぎて何も言えません。
皆さんはこんな凡ミスをしないようにお気をつけください(^^)/
コメントを残す