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
あ、新しくできるんだ
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?"
更新された!
重要なのはモデルに対して行った変更はデータベースのスキーマに同期するということです。
また学びサンクス