2016-05-25 3 views
0

でSmallIntegerField結果のテキスト、forms.pyとオールドスクールDjangoのテンプレート内のModelForm(ファンシー何も)Djangoの私はmodels.pyでmodels.Modelを使用して単純なHTMLフォームを作成しているKeyError例外

でユーザが入力テキストの場合番号フィールドとフォームを送信すると、サーバーは、例KeyError

を返します。以下のフィールドに「高さ」:

class DataRegistryPart2(models.Model): 
    height = models.SmallIntegerField(blank=True, null=True) 

は、テンプレートのHTMLの入力として表示されます。

forms.pyにカスタム検証を使用して
<input id="id_height" name="height" type="number"> 

イム:

... 
def clean(self): 
    cleaned_data = super(CreatePatient, self).clean() 
    height = cleaned_data["height"] # <-- This is where the KeyError happens! 

ユーザーが入力フィールドにテキストまたは番号を入力し、HTMLフォームを送信した場合、DjangoはKeyError例外を返します。

これを(try/catchを使用せずに)起こらないようにするにはどうすればよいですか?

Thanx!

答えて

1

フィールドに有効でない値を入力した場合、そのフィールドは定義上のクリーンではないため、cleaned_dataには存在しません。したがって、KeyError。

他のフィールドとの組み合わせでこの値を必要としない限り、特定のclean_heightメソッドで何をしていてもかまいません。この値は、値が組み込みフィールドの検証に合格した場合にのみ呼び出されます。

+0

あなたの答えをありがとう!クリーンな機能を使用するのは本当に悪い考えです。ユーザーが無効なデータをシステムにクラッシュさせるような形で入力する可能性が非常に高いです。 おそらく私は何かを誤解していますが、私は今、クリーン機能の使用法を見るのが難しいと感じています。おそらくあなたは精緻化することができますか? – Vingtoft

+0

いいえ。私が言うように、それは1つ以上の分野にわたってバリデーションを行うためのものです。この場合、 'cleaned_data.get( 'fieldname')'を使用してKeyErrorをトリガーせずに潜在的に欠損値にアクセスすることができます。 –

+0

それを明確にしていただきありがとうございます。 – Vingtoft

関連する問題