As rookie

ルーキーインフラエンジニアがインフラのこと以外も結構書いてしまうブログ

Djangoのモデル作ってるときにタイプミスしてた。

こんにちは。

最近Djangoでwebアプリケーションを作りたいということで、Djangoのチュートリアルをしています。

チュートリアルと進めていてモデルを作成してデータベースをマイグレーションするという章があります

はじめての Django アプリ作成、その2

です。

問題のタイプミスがこちら `polls/models.py

from django.db import models


class Question(models.Model):
    qeustion_text = models.CharField(max_length=200) # クェウッションってなんぞ?
    pub_date = models.DateTimeField('date published')


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

それに気づかずドンドンチュートリアルを進めていってました。

python manage.py makemigration polls もして、 python manage.py sqlmigrate polls 0001もした よし!確認OK!

python manage.py migrate よしできた!

確認するぞ!!

python manage.py shell
>>> from polls.models import Question, Choice   # Import the model classes we just wrote.
# No questions are in the system yet.
>>> Question.objects.all()
<QuerySet []>
>>> from django.utils import timezone
>>> q = Question(question_text="What's new?", pub_date=timezone.now())

は?エラーでるやんけ!invalid?は?なんでや

そこで以前紹介した

>>> dir(Question)

qeustionってなんやねん 早速models.py 編集さっそくmakemigrations

`python manage.py makemigration polls` 
`python manage.py sqlmigrate polls 0001`

変更されてない。

polls/migrationsを確認しにいくと

0002_auto_20161111_1739.py あ、新しくできるんだ

Djangoチュートリアルと読むと

migrate コマンドはすべての適用されていないマイグレーション(Djangoはデータベース内のdjango_migrationsと呼ばれる特別なテーブルを利用してどれが適用されているかを追跡しています)を捕捉してデータベースに対してそれを実行します - 重要なのは、モデルに対して行った変更はデータベースのスキーマに同期するということです。

なるほど! じゃあもうmigrateしちゃおう

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, polls, sessions
Running migrations:
  Applying polls.0002_auto_20161111_1739... OK

更新された感あるぞ

python manage.py shell

>>> from polls.models import Question, Choice
>>> from django.utils import timezone
>>> q = Question(question_text="What's new?", pub_date=timezone.now())
>>> q.save()
>>> q.question_text
"What's new?"

更新された!

重要なのはモデルに対して行った変更はデータベースのスキーマに同期するということです。

また学びサンクス