質問
いてwebレポートを使用したベ書(新様式)のために分野を制御するクエリを生成するために使用される報告書(開始日、終了日、...).のんのページの申込フォームの初期値税)ができないアクセスのcleaned_data分野の場合を除いてコis_valid().がis_valid()はいつも失敗し捕ます。
いDjangoの形でインフォメーションを利用の場合は編集データなジ書いなだけじゃない傷を付けても有用以外のものを表示します。
例えば、私は:
if request.method == 'GET':
form = MyForm()
else:
form = MyForm(request.method.POST)
if form.is_valid():
do_query(form.cleaned_data['start_date'], form.cleaned_data['end_date'])
is_valid()が失敗であれば取得で(税)さん:
if request.method == 'GET':
form = MyForm()
do_query(form.cleaned_data['start_date'], form.cleaned_data['end_date'])
else:
form = MyForm(request.method.POST)
if form.is_valid():
do_query(form.cleaned_data['start_date'], form.cleaned_data['end_date'])
最初の呼び出do_queryトリガーの例外に関す。cleaned_dataない有効な分野でis_valid()は呼び出されます。こうしていいのようなもの:
if request.method == 'GET':
form = MyForm()
do_query(form['start_date'].field.initial, form['end_date'].field.initial)
else:
form = MyForm(request.method.POST)
if form.is_valid():
do_query(form.cleaned_data['start_date'], form.cleaned_data['end_date'])
それは、というものはありませんのための共通インタフェースの検索の形成の価値観との間の結合形態やジです。
は誰でも見清浄機をうか。
解決
を追加した場合、このメソッドをフォームのクラス:
def get_cleaned_or_initial(self, fieldname):
if hasattr(self, 'cleaned_data'):
return self.cleaned_data.get(fieldname)
else:
return self[fieldname].field.initial
きをお書きコード:
if request.method == 'GET':
form = MyForm()
else:
form = MyForm(request.method.POST)
form.is_valid()
do_query(form.get_cleaned_or_initial('start_date'), form.get_cleaned_or_initial('end_date'))
他のヒント
ジ といったように関連付けられたデータを保持する形式は初期または提供後の検証に失敗する可能性があります。てその他の回答及びご自身の結論への提供の初期値チェックも行きデータ及び初期値です。
の場合を形形状加工 や 検証できないデータを検証する前にアクセス cleaned_data
.
を渡すことができ辞書の初期値フォーム:
if request.method == "GET":
# calculate my_start_date and my_end_date here...
form = MyForm( { 'start_date': my_start_date, 'end_date': my_end_date} )
...
を参照 公式な形式のAPIドキュメント, がいします。
編集:に基づく回答から他のユーザーもこのブランドを解
if request.method == "GET":
form = MyForm()
form['start_date'] = form['start_date'].field.initial
form['end_date'] = form['end_date'].field.initial
else:
form = MyForm(request.method.POST)
if form.is_valid():
do_query(form.cleaned_data['start_date'], form.cleaned_data['end_date'])
まだ試したことかきることを確認す。このように新しい方法でこのアプローチを必要としませんその他のコードが書いていないたします)について知り新しい"魔法の"を取得します
所属していません StackOverflow