[django]formでフィールド項目以外のエラーはnon_field_errors()で拾える

Written by uechoco 11月 28
[django]formでフィールド項目以外のエラーはnon_field_errors()で拾える はコメントを受け付けていません。
この記事を読む時間:117くらい

djangoのformをtemplateに描画する時、以下のようにフィールド個別に要素を抽出して、デザインを個別に割り当てるなどすることが出来る。

  • {{field.label}}
  • {{field.label_tag}}
  • {{field.value}}
  • {{field.html_name}}
  • {{field.help_text}}
  • {{field.errors}}

エラーをフィールド別に独自デザインするときなどにはよく使う。

では、フィールド項目以外のエラー(例えばclean()メソッドでフォーム自体にValidateErrorが発生した場合)は、
いちいち{{form.errors}}から各フィールドの{{field.errors}}を抜き出してから表示するのか。

そんなことはない。

  • {{form.non_field_errors}}

がある。一応Django 1.0の頃からあったみたいです(フォームやフィールドのバリデーション — Django v1.0 documentation)。
覚えておくとフォーム周りで細かいデザインをしたいときに役立ちます。

[python]Django-south管理下のモデルはinitial_dataを使ってはいけない

Written by uechoco 11月 25
[python]Django-south管理下のモデルはinitial_dataを使ってはいけない はコメントを受け付けていません。
この記事を読む時間:227くらい

Djangoを使っている時にsouthでDBスキーマのマイグレーション管理をすることがあると思いますが、
southの管理下に入ったモデルの初期データはinitial_dataには入れないほうがよさそうです。

initial_dataとは、Djangoで予約された名前で、jsonやyamlなどの拡張子をつけるのですが、
initial_data.xxxというファイル名が見つかると、DBの同期をする時に自動的に読み取ってくれるという物。
文字通りの初期データとして扱われます。テストを走らせると最初はDB構築から入りますから、しょっちゅう使われています。

ところが、initial_dataの中に、south管理下のモデルの初期データを入れてしまうと困ったことが起きるようです。
最初のDB同期時に「DatabaseError: relation “hogeapp_foomodel” does not exist」というようなエラーをたくさん吐きます。

おそらく、DBの初期化順序が syncdb -> load initial_data -> south migrate という順番になっていて、
southのmigrateが走るまではinitial_dataを挿入しようとしても対象のテーブルが存在しないために起きている気がします(詳しく調べてない)。

で、回避策を調べていたら、幾つかのサイトで有力な情報を得ました(全部英語です)。

どうやらやはり、southを使う場合はinitial_dataを使わないほうがよさそうで、代わりにmigrationの中に初期データを読み込むコマンドを仕込むことで、migrateが行われた後に初期データを読み込むフローを作ってあげれば良いようです。

ということで、(今はちょっと時間が無いので、後で)修正してみますー

[学習]忙しい人ほどBDD(勉強会ドリブンデベロップメント)やろうぜ

Written by uechoco 11月 25
[学習]忙しい人ほどBDD(勉強会ドリブンデベロップメント)やろうぜ はコメントを受け付けていません。
この記事を読む時間:140くらい

皆さん日頃から忙しい方が多いと思います。
なかなか自分の時間を思うように作れず、勉強会とかに参加してもただ聞くだけかもしれません。

なんてもったいない!

勉強会に発表したこと無い方、長い発表じゃなくてLTでもいいんです。発表しましょう。

発表すると変わります!

発表できた喜びとか、みんなから注目される喜びとか、すごくいいですよ。
私自身も、初めてLTをやった時には、懇親会で名前を覚えてもらえたし、ブログにスライドを載せた次の日には昔の取引先の方から電話がかかってきて案件を紹介していただいたりとしました。

でも皆さん忙しいですよね。あるいは何か目標がないと立ち上がれなかったりするかもしれません。

だったら、BDDはいかがでしょう?
BDD=勉強会ドリブンデベロップメント。勝手に作りました。日本語ですw。(※BDD=振舞い駆動開発という手法もあります)
手順は簡単です。

  1. まずは勉強会に申し込む。もちろん発表者枠で。
  2. 勉強会で発表するために技術を学ぶ・何かを開発する・資料を作る

これだけです。

よく、ダイエットとか運動が続かない人が、周りのみんなに宣言して、周知の事実とすることで続けようと頑張るアレに似ていますね。
こうすれば、勉強するしかなくなるんです。
LTするしかなくなるんです。

皆さんもBDDを使ってLTに挑戦してみるのはいかがでしょうか?

最後に一言。

BDDしましょうか(生存戦略風に。