django1.7チュートリアルをやるのにつまったポイントまとめ
https://docs.djangoproject.com/en/1.7/intro/tutorial01/
- まず1.7は日本語翻訳されていないので元を読むしかない
- 翻訳されている1.4とはマイグレーションのやり方などが変わっているので注意
django1.4と1.7のモデル設定の違い[未解決]
マイグレーションまでのコマンドが違うので注意。
以下は1.7でのやり方。
mysite/setting.py
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'polls',
)
djangoへのpollsアプリケーションの追加
以下のコマンドを実行
・マイグレーションファイルの作成
$ python manage.py makemigrations polls
正常に実行されると以下のようになる
Migrations for 'polls':
0001_initial.py:
- Create model Question
- Create model Choice
- Add field question to choice
0001_initial.pyというファイルが作成され、
その中にはQuestionとChoiceのモデルが定義されている
これがマイグレーションファイル。
・マイグレーションのためのSQLの作成
$ python manage.py sqlmigrate polls 0001
これが正常に実行されると以下のように表示される
BEGIN;
CREATE TABLE polls_question (
"id" serial NOT NULL PRIMARY KEY,
"question_text" varchar(200) NOT NULL,
"pub_date" timestamp with time zone NOT NULL
);
CREATE TABLE polls_choice (
"id" serial NOT NULL PRIMARY KEY,
"question_id" integer NOT NULL,
"choice_text" varchar(200) NOT NULL,
"votes" integer NOT NULL
);
CREATE INDEX polls_choice_7aa0f6ee ON "polls_choice" ("question_id");
ALTER TABLE "polls_choice"
ADD CONSTRAINT polls_choice_question_id_246c99a640fbbd72_fk_polls_question_id
FOREIGN KEY ("question_id")
REFERENCES "polls_question" ("id")
DEFERRABLE INITIALLY DEFERRED;
COMMIT;
・マイグレーションの実行
$ python manage.py migrate
unicode設定をmodel.pyに書いても効かない[解決済]
polls/model.py
from django.db import models
class Question(models.Model):
# ...
def __str__(self): # __unicode__ on Python 2
return self.question_text
class Choice(models.Model):
# ...
def __str__(self): # __unicode__ on Python 2
return self.choice_text
こうすればインタラクティブシェルでで下記のようになるはずなのに
>>> Question.objects.all()
[<Question: What's up?>]
以下のようになってしまう
>>> Question.objects.all()
[<Question: Question object>]
補足:インタラクティブシェルで実行されたデータはそのままdbへ保存されている
[解決方法]
model.pyを更新した後、一度インタラクティブシェルから抜けて、再度インタラクティブシェルを起動させると反映される。