「Django 備忘」の版間の差分
ナビゲーションに移動
検索に移動
1行目: | 1行目: | ||
==Django 備忘== | ==Django 備忘== | ||
− | [[Django]][[Python]] | + | [[Django]] | [[Python]] | |
===Model と Form=== | ===Model と Form=== | ||
====Form から Model のインスタンスを保存せずに取得==== | ====Form から Model のインスタンスを保存せずに取得==== |
2020年2月15日 (土) 08:35時点における版
目次
Django 備忘
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 の モジュール検索パスにある必要がある。
© 2006 矢木浩人