Date Modified Tags django / python

1.6の時と同様にpipでアップデートした。

注意点

個人的に作っているアプリでアップデートした際にコード変更が必要だった点は以下の通り。他にも色々使えなくなった命令とかあるみたいだけど引っ掛からなかったので省略。詳しくはDjango 1.8 release notes | Django documentation | Djangoで見ることが出来る。

urls.pyで指定するnamespace

urls.pyでapp_nameを指定した場合に必ずnamespaceを指定する必要があるようになった。

# urls.py
url(r'^', include('hoge.urls',app_name='hoge')),#これはダメ
url(r'^', include('hoge.urls',app_name='hoge',namespace='hoge')),#これはOK

ダメなコード実装してた場合は、reverseでurlを作ってる箇所にも修正が必要になる。

transactionについて

transaction.commit_unless_managed()

みたいなメソッドが無くなってた。

## migrate関連でのハマりポイント(2015-10-20追記)

1.7から1.8にバージョンアップすると、マイグレーションでエラーが出る。普通に

```sh
$ python manage.py makemigrations
$ python manage.py migrate

とするとmigrateコマンドで

Error creating new content types. Please make sure contenttypes

というメッセージが出てコマンドが途中で終わってしまう。調べて結果データベース上で

ALTER TABLE django_content_type DROP COLUMN name;

を実行することで対処できた。要はカラムが一個要らなくなったみたい。

参考:django - Error creating new content types. Please make sure contenttypes is migrated before trying to migrate apps individually - Stack Overflow

adminでユーザー追加するとnot null制限に引っ掛かるエラー(2015-10-26追記)

admin画面でユーザーを追加すると「last_loginがnot null制限あるのにnullを入れようとした」と怒られた。

対策をググると普通にmigrateコマンドすればおkと書いてあるのに出来なかったのでsqlで対応してみた

alter table auth_user alter column last_login drop not null; ```

これでユーザー追加出来るようになった

嬉しい点

色々あるみたいだけど、PostgreSQLを使っているので、特にPostgreSQL使ってる場合に、独自のフィールドを使えるようになった点が嬉しい。ArrayFieldとか、わざわざリレーション作りたくない時とか便利そう。

Djangoドキュメントによる説明