見出し画像

【76日目】Django_マイグレーションがうまくいかない話_プログラミング学び日記

 このnoteは、31歳未経験からエンジニアを目指して勉強していく記録を綴っているものです。現在はAdTechでカスタマーサクセスを担当しつつ、色んなチャンスに恵まれ、CS業務や子育てと並行しながらチャレンジしています。

 これからプログラミングを始める方にとってのTipsやモチベアップに繋げられるように頑張りたいと思っています。
--------------------------------------------


久しぶりの投稿になってしまいました。ここ数日は遅くまで仕事にかかりきりで、ほぼ時間を確保できておりません。ただこのままだともっと放置してしまいそうだったので、今やっていることを少しでもアウトプットしておこうと思います。

ここ数日はわずかな時間のなかで、Djangoで作成したTodoアプリを改修すべく、マイグレーションをやろうとしていました。

Todoアプリのソースコードはこちらです。


具体的には、Todoに「カテゴリー」と「処理状況」のデータを付与するため、以下のモデルを追加しようとしています。

class TodoCategory(models.Model):
    name = models.CharField(
        max_length=255,
        blank=False,
        null=False,
        unique=True,)

    def __str__(self):
        return self.name


class TodoStatus(models.Model):
    name = models.CharField(
        max_length=255,
        blank=False,
        null=False,
        unique=True,)

    def __str__(self):
        return self.name


が、これが全然うまくいっていません。
まとまった作業時間が確保できていないというのも大きな理由ですが、やり方がそもそもよくない気がしています。

ずっと以下のエラーが出ております。

django.db.utils.OperationalError: no such table: todo_todocategory

これは「makemigration」を実行しただけで出てきて、そもそもマイグレーションファイルが作成されませんでした。

ここで浅はかな考えが浮かびました。
「マイグレーションファイルをむりやり生成して、そこでモデルを追加するCreateModelをやってしまえば何とかなるのでは…?」

そのため一旦新たなモデルをコメントアウトして、元々の状態で「makemigration」しました。そうすると狙い通りファイルは作成されました。

やっとコードが書けると意気込んで以下のoperationsを書き込みました。

from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ('todo', '0001_initial'),
    ]

    operations = [
        migrations.CreateModel(
            name='TodoCategory',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=255, blank=False, null=False, unique=True,)),
            ],
        ),

        migrations.CreateModel(
            name='TodoStatus',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=255, blank=False, null=False, unique=True,)),
            ],
        ),

        migrations.AddField(
            model_name='Todo',
            name='category',
            field=models.ForeignKey(on_delete=models.SET_DEFAULT, to='todo.TodoCategory', default="未設定", verbose_name='業務種別'),
        ),

        migrations.AddField(
            model_name='Todo',
            name='status',
            field=models.ForeignKey(on_delete=models.SET_DEFAULT, to='todo.TodoStatus', default="未設定", verbose_name='処理状況'),
        ),
    ]


そして満を持して「python manage.py migrate」を実行すると。。。

django.db.utils.OperationalError: no such table: todo_todocategory

またお前かい!という感じです。


いろいろ間違っているんだと思います。
調べる時間が欲しい。
YouTubeに何かヒントになる動画があるかもしれないので、時間ができたら調べてみようと思います


ただもはやゼロから作った方が速そうだし、マイグレーションを覚えるのは後回しにしようかな。。(でも気になる)

断続的にしか時間が取れなさそうならマイグレーションの情報収集をして、まとまった時間が取れそうなら新しいTodoアプリを一気に作る、という感じでいこうと思います。


今日はうまくいってないことのアウトプットでした。
お読みいただきありがとうございました。


これまで修了したコース等

【YouTube】
Pythonでウェブサービスを作ろう! #1
テンプレートをマスターしよう! #2
静的ファイルを配信しよう !#3
本番公開しよう! #4
データベースと接続しよう! #5
ブログを作って学ぶモデル入門! #6
これが汎用ビューの力! #7

【Paiza】
Aランクレベルアップメニュー 24/49問
ループメニュー1 20/20問
ループメニュー2 12/20問
配列メニュー      56/64問
条件分岐メニュー    25/25問
二重ループメニュー   19/19問
配列活用メニュー    26/26問
文字列処理メニュー   30/30問
Bランクレベルアップメニュー 62/62問
Cランクレベルアップメニュー 30/30問
ランクB合格
ランクC合格

【書籍/ブログ】
Django入門 | 初心者でも1時間でWebアプリ(Todoアプリ)を作成するコース
基礎からのMySQL     514/514頁
Web技術の基本      189/189頁 ※2周目中
京大のPython教科書    116/201頁
Pythonデータベースプログラミング 194/194頁
Pythonエンジニアファーストブック読了

【Progate】
Python Ⅰ~Ⅴ
Python アプリ版 コースⅠ~Ⅴ
SQL Ⅰ~ Ⅳ
SQL アプリ版 コースⅢ
HTML&CSS 初級編

【その他】
Pythonの環境構築
VSCodeの環境構築
MySQLの環境構築(MAMP)
Git / GitHubの環境構築
HEROKUの環境構築

この記事が気に入ったらサポートをしてみませんか?