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

MyMemoWiki

「Django 備忘」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
 
1行目: 1行目:
==Django 備忘==
+
==[[Django 備忘]]==
 
[[Django]] | [[Python]] |  
 
[[Django]] | [[Python]] |  
 
===Model と Form===
 
===Model と Form===
41行目: 41行目:
 
===設定===
 
===設定===
 
====DJANGO_SETTINGS_MODULE====
 
====DJANGO_SETTINGS_MODULE====
*どの設定を使っているのかを Django に教る必要があり、環境変数 DJANGO_SETTINGS_MODULE を使う。
+
*どの設定を使っているのかを [[Django]] に教る必要があり、環境変数 DJANGO_SETTINGS_MODULE を使う。
*DJANGO_SETTINGS_MODULE は Python のモジュールパス構文、たとえば mysite.settings のようにする。
+
*DJANGO_SETTINGS_MODULE は [[Python]] のモジュールパス構文、たとえば mysite.settings のようにする。
*設定モジュールは Python の モジュール検索パスにある必要がある。
+
*設定モジュールは [[Python]] の モジュール検索パスにある必要がある。

2020年2月16日 (日) 04:24時点における最新版

Django 備忘

Django | Python |

Model と Form

Form から Model のインスタンスを保存せずに取得

  1. new_model = form.save(commit=False)

Model インスタンスからFormを生成

  1. form = SampleForm(instance=new_model)

ウィジェットのオーバーライド

  1. class SampleModel(models.Model):
  2. sample_field = CharField(max_length=10)
  1. class CocomoForm(ModelForm):
  2. sample_field = CharField(widget=TextInput(attrs={'readonly':'readonly'}))
  3. class Meta:
  4. model = Cocomo

バリデーション処理の呼び出し順

  1. フィールドクラスの clean() メソッド
  2. フォームクラスの clean_{fieldname}() メソッド。{fieldname} はフィールド名
  3. フォームクラスの clean() メソッド

フィールドに依存しないエラー

  • Form の clean() メソッド内でハンドリングしたようなフィールドに依存しないエラーは、forms.non_field_errors()で取得できる
    • フォーム定義
  1. class CocomoForm(Form):
  2. def clean(self):
  3. f1 = self.cleaned_data['f1']
  4. try:
  5. f1 = float(f1)
  6. if f1 == 0.0:
  7. raise forms.ValidationError('フィールド 1 は 0 以外の値を設定')
  8. return self.cleaned_data
    • テンプレート側
  1. テンプレート:Form.non field errors

Textarea Widgetに行列を指定する

  1. from django.forms import *
  2. class HogeForm(Form):
  3. data = CharField(widget=Textarea(attrs = dict(rows='40', cols='50')))

設定

DJANGO_SETTINGS_MODULE

  • どの設定を使っているのかを Django に教る必要があり、環境変数 DJANGO_SETTINGS_MODULE を使う。
  • DJANGO_SETTINGS_MODULE は Python のモジュールパス構文、たとえば mysite.settings のようにする。
  • 設定モジュールは Python の モジュール検索パスにある必要がある。