| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
1,908 バイト追加 、 2020年2月15日 (土) 07:31
ページの作成:「==Django 備忘== [Django][Python] ===Model と Form=== ====Form から Model のインスタンスを保存せずに取得==== new_model = form.save(commit=False)…」
==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 の モジュール検索パスにある必要がある。

案内メニュー