21
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

django1.7のチュートリアルやる時につまずくこと

Last updated at Posted at 2014-10-18

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を更新した後、一度インタラクティブシェルから抜けて、再度インタラクティブシェルを起動させると反映される。

>>> p.was_published_recently()はなにをしている?[未解決]

21
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?