Django オンラインドキュメント和訳 更新しました。 Revision 5442 (2007/06/08). 「"django.contrib" 下のアドオン」「データベース API - オブジェクトへの変更を保存する」「やや複雑な組み込みフィールドクラス」「カスタム SQL の実行」「mod_python - 基本的な設定」「テンプレート言語ガイド - フィルタ」についての記述が更新されています。
以下、 diff -r 5418:5442 の主な変更分です。
これらのコードは Django 配布物中の django/contrib にあります.このドキュ メントでは, contrib 下のパッケージをざっと解説し, パッケージを利用する ときに必要な依存関係について説明します.
ForeignKey フィールドの更新も同様で,適切な型のオブジェクトを代入して保 存します
joe = Author.objects.create(name="Joe")
entry.author = joe
entry.save()
外部キーに代入するオブジェクトの型を間違えると,Django はエラーを出します.
入力値がカンマで区切られたメールアドレスになっていて,少なくとも一つアドレ スが入っているかどうか検証するカスタムフィールドの例を以下に示します.簡単 のため,個々のメールアドレスの検証は is_valid_email() という関数で行っ ていることにします.クラスの全体像は以下のようになります
from django import newforms as forms
class MultiEmailField(forms.Field):
def clean(self, value):
emails = value.split(',')
for email in emails:
if not is_valid_email(email):
raise forms.ValidationError('%s is not a valid e-mail address.' % email)
if not emails:
raise forms.ValidationError('Enter at least one e-mail address.')
return emails
件の ContactForm の例を使って,上のカスタムフィールドをフォームで使って みます.以下のように, forms.EmailField を MultiEmailField に置き換 えてください
class ContactForm(forms.Form):
subject = forms.CharField(max_length=100)
message = forms.CharField()
senders = MultiEmailField()
cc_myself = forms.BooleanField()
connection や cursor は標準の Python DB-API が提供する機能の (トランザクションの扱い を除いた) ほとんどを実装しています. Python DB-API に詳しくないのなら,上の SQL 文の cursor.execute() でパラ メタを直接 SQL に入れるのではなく,プレースホルダ "%s" を使っていること に注意して下さい.このテクニックを使うと,根底にあるデータベースライブラリ は必要に応じて自動的にパラメタをクオートしたりエスケープ処理したりします. (また,Django はプレースホルダ文字として SQLite の Python バインディングが 使っている "?" ではなく "%s" を使うので注意してください.これは インタフェースに一貫性をもたせるための設計です.)
また, Django プロジェクトを PYTHONPATH に追加するよう設定している場合 には,以下のような設定を mod_python に教えておく必要があります:
<Location "/mysite/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonDebug On
PythonPath "['/path/to/project'] + sys.path"
</Location>
PythonPath "['/path/to/project'] + sys.path"
フィルタによっては引数をとります.フィルタの引数は {{ bio|truncatewords:"30" }} のような形式で表します.この例では,変数 bio の最初の 30 語を表示します.
フィルタの引数にスペースが入っている場合は,二重引用符で囲ってください. 例 えば,カンマとスペースでリストを結合するには {{ list|join:", " }} のようにします.
