djangoformsを使ってみた

内部のマスタメンテ用にはいいかもしれんが、シンプルすぎて公開には耐えない。でもせっかく動くコードがあるので残しておく。
必要に応じて修飾できそう(ウィジェット — Django v1.0 documentation)。後でもっと勉強する。とりあえず現時点でのコードは以下の通り。

前提条件

  • Django使用
  • "Hoge"というクラスをmodels.pyに定義している
  • settings.py等も適切に定義されているとする

urls.py

urlpatterns = patterns('',
    (r'^hoge/(?P<key>[^\.^/]+)/$', 'hoge.views.detail'),
)

views.py

# 必須:Djangoモジュールをインポートする前にあらかじめインポートしておくこと
from google.appengine.ext.db import djangoforms

from django.http import Http404
from django.shortcuts import render_to_response

from hoge.models import Hoge

class DetailForm(djangoforms.ModelForm):
    class Meta:
        model = Hoge
        exclude = ['example'] # 表示/編集したくないフィールドがあればここに書く

def detail(request, key):
    if request.method == 'POST':
        form = DetailForm(request.POST)
        if form.is_valid:
            pass # 更新処理、以下省略(w
    else:
        o = Hoge.get(key)
        if o == None:
            raise Http404
        else:
            form = DetailForm(instance=o) # これだけでフォーム代入完了。すばらしい
            return render_to_response('detail.html', {'prop_rows': form})

detail.html

<html>
  <head><!-- 省略 --></head>
  <body>
    <h1>Hoge 入力フォーム</h1>
    <form><!-- formの中、省略 -->
      <table>
        {{ prop_rows }}
      </table>
      <input type="submit">
    </form>
  </body>
</html>