2011-01-12 5 views
2

ここにdjangoとnginxの両方の設定ファイルが含まれているので、この質問をここに投稿するべきか、またはserverfaultに投稿するべきかわかりません。djangoフォームのフィールド名として有効でない識別子を使用する方法

私はファイルフィールドを含むフォームからPOSTデータを受け取るdjangoビューを持っています。

ファイルのアップロードフィールドを取得し、ディスクの場所に保存し、各ファイルが見つかるローカルパスとその名前やその他のメタデータを追加する追加モジュール(アップロードモジュール)その後、元のファイルフィールドをPOSTから削除します。

追加されるフィールドはあまり柔軟性がなく、名前にピリオド(。)またはダッシュ( - )が含まれています。

これはすべてうまくいくものですが、問題はPython側にあります。フォームを使用して着信POSTデータを検証する場合は、ピリオドまたはダッシュを含む名前のフィールドを持つフォームを定義する方法がわかりません。 djangoフォームには、変数に格納されているフィールドとは異なる名前があることを伝える方法はありますか?

私の回避策は、単純にdjangoフォームを使用しないで、着信データを別の方法で(どのように)サニタイズするかです。

それとも誰かがnginxのでアップロードモジュールを使用した経験を持ち、$ upload_field_name.XXXX追加フィールドはピリオドを使用しないように指令

upload_set_form_field $upload_field_name.name "$upload_file_name"; 
upload_set_form_field $upload_field_name.content_type "$upload_content_type"; 
upload_set_form_field $upload_field_name.path "$upload_tmp_path"; 

を使用する方法を知っている場合は? (ダッシュは機能しますが、Pythonの識別子をもう一度壊してしまえば、他の文字は設定ファイルを破壊します)

どちらの場合でも推奨されますか?

ありがとうございます!

答えて

3

私は自分の質問に答える方法を見つけたと思います。私はそれが誰かを助けることを願っています。私は「uploadedFile.name」というフィールドで提出POSTを処理するために使用する

形式は次のようになります。

我々はピリオドを使用することはできませんので、もちろん動作しません
from django.forms import Form, fields 
def UploadForm(Form): 
someField = fields.CharField() 
uploadedFile.name = fields.CharField() 

識別子(uploadedFile.name)に格納します。

def UploadForm(Form): 
someField = fields.CharField() 
def __init__(self, *args, **kwargs): 
    #call our superclasse's initializer 
    super(UploadForm,self).__init__(*args,**kwargs) 
    #define other fields dinamically: 
    self.fields["uploadedFile.name"]=fields.CharField() 

は、今、私たちはビューでそのフォームを使用することができます。

答えは、我々は素晴らしく、任意の文字列をフィールドに名前を付けることができFormクラスのフィールドの辞書を使用してフォームフィールドを定義することです他のフィールドと同じようにuploadedFile.nameのデータをcleaned_dataにアクセスしてください:

if request.method == "POST": 
theForm = UploadForm(request.POST) 
if theForm.is_valid(): 
    theUploadedFileName=theForm.cleaned_data["uploadedFile.name"] 

これは機能します。

関連する問題