本日は、
Djangoエラー処理シリーズ「models.pyの書き換えによるDataError」
についてです
モデルフィールドをStr型からInt型に書き換えたところ
既存のデータが残ってしまう為、下記のようなエラーが出てしまいました
django.db.utils.DataError: "integer"型の入力構文が不正です: "suspect"
解決方法が見つかりましたので、共有します
答えはとてもシンプルでした!!
解決策はズバリ、migrations内のpyファイル書き換え
appフォルダ内にあるmigrationsフォルダには、makemigrationsによって変更をデータベースに書き込むためのファイルが作成されます
migrations内にある最新のファイルで下記の通りコードを追加します
問題を解決してくれたコード
【これをmigrations内のファイル上部に足すだけ】
qs = Lead.objects.all() for q in qs: q.stage = 0 q.save()
migrations内の.pyファイルにも自由にコードが書けるんです!
【詳しく見てみよう!】元のmigrations内ファイル
$ python manage.py makemigrations
は問題なくできますが、
$ python manage.py migrate
で問題が起こりました
migrations内のファイルを見てみます
【元のファイルのコード】
# Generated by Django 3.1.6 on 2021-03-25 11:24 from django.db import migrations, models from leads.models import Lead class Migration(migrations.Migration): dependencies = [ ('leads', '0020_lead_completed'), ] operations = [ migrations.AlterField( model_name='lead', name='stage', field=models.IntegerField(choices=[(0, '見込み'), (1, 'OI'), (2, 'FF'), (3, '商談・商機'), (4, 'クロージング')], default=0, verbose_name='ステージ'), ), ]
【解決後】コード全体
# Generated by Django 3.1.6 on 2021-03-25 11:24 from django.db import migrations, models from leads.models import Lead qs = Lead.objects.all() for q in qs: q.stage = 0 q.save() class Migration(migrations.Migration): dependencies = [ ('leads', '0020_lead_completed'), ] operations = [ migrations.AlterField( model_name='lead', name='stage', field=models.IntegerField(choices=[(0, '見込み'), (1, 'OI'), (2, 'FF'), (3, '商談・商機'), (4, 'クロージング')], default=0, verbose_name='ステージ'), ), ]
書き換え前のデータがstr型でしたので、makemigratins後に作成されるファイル「migrations内の最新ファイル」の上部に、既存のデータ全てをint型に書き換える処理を記述しました
qs = Lead.objects.all()
for q in qs:
q.stage = 0
q.save()
このおかげで、int型に変更後もエラーがなくなり、型の変更がスムーズにできるようになりました!
以上、とても簡単ですが結構はまりましたので共有させて頂きました。
migrations内のファイルに記述するという方法は今回のエラーに限らず色々と使えそうです!
✔当ブログは以下のような方に向けて書かれています
「Djangoでのアプリ開発を学びたい!」
「Djangoで開発したアプリをWebで公開するにはどうするの?」
✔当ブログ掲載の記事
- Djangoで作る日報アプリ開発
- WebアプリをWeb上に公開する方法
- Webアプリ開発に必要なそのほかの情報

【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!
ITCブログにご協力いただける方は、以下もご検討いただけると嬉しいです。