トップ 一覧 ping 検索 ヘルプ RSS ログイン

Django 備忘の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!Django 備忘
[Django][Python]
!!Model と Form
!Form から Model のインスタンスを保存せずに取得
 new_model = form.save(commit=False)

!Model インスタンスからFormを生成
 form = SampleForm(instance=new_model)

!ウィジェットのオーバーライド
 class SampleModel(models.Model):
     sample_field = CharField(max_length=10)

 class CocomoForm(ModelForm):
     sample_field = CharField(widget=TextInput(attrs={'readonly':'readonly'}))
     class Meta:
         model = Cocomo

!バリデーション処理の呼び出し順
+フィールドクラスの clean() メソッド
+フォームクラスの clean_{fieldname}() メソッド。{fieldname} はフィールド名
+フォームクラスの clean() メソッド
!フィールドに依存しないエラー
*Form の clean() メソッド内でハンドリングしたようなフィールドに依存しないエラーは、forms.non_field_errors()で取得できる
**フォーム定義
 class CocomoForm(Form):
     def clean(self):
         f1 = self.cleaned_data['f1']
         try:
             f1 = float(f1)
                 if f1 == 0.0:
                     raise forms.ValidationError('フィールド 1 は 0 以外の値を設定')
     return self.cleaned_data
**テンプレート側
 {{form.non_field_errors}}

!Textarea Widgetに行列を指定する
 from django.forms import *
 class HogeForm(Form):
     data = CharField(widget=Textarea(attrs = dict(rows='40', cols='50')))
!!設定
!DJANGO_SETTINGS_MODULE
*どの設定を使っているのかを Django に教る必要があり、環境変数 DJANGO_SETTINGS_MODULE を使う。
*DJANGO_SETTINGS_MODULE は Python のモジュールパス構文、たとえば mysite.settings のようにする。
*設定モジュールは Python の モジュール検索パスにある必要がある。