2009-06-24 10 views
3

私はシンプルなDjangoのフォームがあります。Djangoフォームフィールドのデータにアクセスするにはどうすればよいですか?

class testForm(forms.Form): 
    list = forms.CharField() 

    def getItems(self): 
    #How do I do this? Access the data stored in list. 
    return self.list.split(",") #This doesn't work 

リスト形式のフィールドは、CSVデータ値を格納します。ビュー内のtestFormの外部インスタンスから、フォームフィールドに格納されている.csv値リストを確認できます。

答えて

1

通常、フォームデータを取得するためにdjangoで行うことは、次のようなものになります。

form = testForm(request.POST) 
if form.is_valid: 
    # form will now have the data in form.cleaned_data 
    ... 
else: 
    # Handle validation error 
    ... 

データの書式設定や検証を自分で行う場合は、フォームの検証方法にこれを入れることができます。フォーム全体またはフォームフィールドのいずれか。これは、コードをよりドライにする素晴らしい方法です。

0

ここで知る必要があることがいくつかあります。

まず、Pythonクラスのメソッドでは、 'self'オブジェクトを通して属性にアクセスするのが一般的です。だから、理論的にはあなたの関数は次のようになります。

def get_items(self): 
    return self.list.split(",") 

しかし、Djangoのフォームの場合には、これは動作しません。これは、フィールドが独自の値を持たないためです。値は、レンダリング時にフィールドに付加され、値が初期データで適用されたか、データ辞書に渡されたかによって異なる方法で取得されます。

あなたは(form.is_valid()を介して)フォームを検証している場合は、cleaned_data辞書を経由して、フォームを取得することができます:listが何らかの理由で検証を失敗した場合

return self.cleaned_data['list'] 

しかし、これは失敗します。

0

フォームでis_validを呼び出し、次にcleaned_dataディクショナリにアクセスします。

2

他にも既に述べたように、フォームのcleaned_data辞書属性とis_validメソッドを使用する必要があります。したがって、次のようなことができます。

def getItems(self): 
    if not self.is_valid(): 
     return [] # assuming you want to return an empty list here 
    return self.cleaned_data['list'].split(',') 

理由は、フォームフィールドが標準的なインスタンス変数ではないということです。お役に立てれば!

関連する問題