2016-04-23 8 views
0

からの辞書を使用してフォームを初期化します。データをデータベースに保存してドラフトテーブルに保存する '保存'フォームオプションが必要です。 (私は提出されたデータとそれを混合しない)。request.POST

ユーザーが送信をクリックすると、ドラフトを作成し、POSTデータを入力します。

Draft.objects.get_or_create(email=email) 
draft.data = post_to_json(self.request.POST) 
draft.save() 

Post_to_jsonは、以下の

def post_to_json(post): 
    dictionary = {} 
    for key in post.keys(): 
     data = post.getlist(key) 
     dictionary[key] = data 
    return json.dumps(dictionary) 

を行い、それは電子メールがPOSTでmulticheckbox {"email": ["[email protected]"], "skills": ["01", "02", "03", "04"]}とpost_to_jsonがあるが、そのように保存し、入力フィールドやスキルだった場合、それがそうであるようPOSTが保存されます。 (もし私がちょうどそれをダンプすれば、私は{email": "[email protected]", "skills": "04"}を得るだろうので、いくつかのスキルは失われるでしょう(フォームで正しく初期化されないことは言うまでもありません))。

これで、ユーザーが返品して処理を続行するときにフォームを初期化する方法に問題がありました。

私が実行しようとしました:

def get_initial(self): 
    draft_uuid = self.kwargs.get('uuid') 
    draft = Draft.objects.get(uuid=draft_uuid) 
    return json.loads(draft.data) 

しかし、その後のブラウザで私は ["[email protected]"]だけではなく [email protected]をあらかじめ入力しています。

DjangoはMyFormClass(request.POST)を実行したときに実際にフォームをあらかじめ正確に埋め込むことができますが、POSTを辞書に変換して同じ方法で使用しようとすると失敗しますか?

私の目標は、辞書からフォームにデータを読み込んで、ブラウザにあらかじめ入力しておくことです。

どのようにすればいいですか?

答えて

0

データを{field:value}形式に変換して、フォームをインスタンス化するたびにフォームの初期値として設定します。

あなたがこれを行うことはできませんなぜ

https://docs.djangoproject.com/en/1.9/ref/forms/fields/#initial

-

data = user.get_initial() # Giving you the json format 
mcb_fields = ("skills",) #If you have more such fields, write their name here 
init_data = {} 
for key, value in data.iteritems(): 
    if key in mcb_fields: 
     init_data.update({key :value}) # check if you have to convert each value to int or if it accepts string (this is in str format) 
    else: 
     init_data.update({key :value[0]}) 
form = SomeDraftForm(initial =init_data) 
+0

私のデータがどのように見えるので、私はすでにそれが動作しないことを試みた: '{「メール」:[ '私の@ mail.com ']} 'そうすれば、私は' [' [email protected] '] 'という形をしています.....もしlen(value)= = 1:戻り値[0] 'しかし、1つの答えだけがチェックされていれば、マルチチェックボックスでは機能しません。 – Zoli

関連する問題