2017-06-19 7 views
0

私はフォームをデジタル化するためにdjangoを使用しています。このフォームは少し複雑で、そこには多くのフィールドがあります。私はDjangoがフィールドごとにobj.fieldname = form.cleaned_data['fieldname']のような変数を宣言するのではなく、すべてのフィールドに対してform.cleaned_data []を実行できるかどうか疑問に思っていました。django --form.cleaned_data []モデル内のすべてのフィールドについて

は私がviews.pyでforloopでそれを試してみましたが、それはこれは私が話しているforloopある

を動作しません。

def get_form_naw(request): 
    if request.method == 'POST': 
     form = Form1(request.POST) 
     if form.is_valid(): 
      for x in Model1(): 
       formname = x.name 
       o = Model1() 
       o.formname = form.cleaned_data[formname] 
      o.save() 
    else: 
     form = Form1 
    return render(request, 'folder/home.html', context=locals()) 

私が使用していますmysqlデータベース。私のフォームは、このように宣言されています forms.py

class Form1(forms.ModelForm): 

    class Meta: 
     model = Model1 
     exclude = ('id') 
+2

あなたは直接オブジェクトを作成するためのフォームを救うことができます。なぜフィールドごとにオブジェクトフィールドを作成する必要がありますか? – Rohan

+0

あなたの除外には末尾のカンマ、つまり '( 'id'、)'がありません。しかし、 'id'フィールドはデフォルトでは含まれないので除外する必要はありません。 – Alasdair

答えて

1

あなたがフィールドをループする必要はありません。あなたは、モデルのフォームを使用しているので、あなただけのsave形成すべきである:あなたが本当にsetattrを使用することができ、動的にフィールドを設定する必要がある場合

if form.is_valid(): 
    obj = form.save() 
    ... 

を。

fieldname = 'username' 
value = 'my_user' 
setattr(obj, fieldname, value) 
0

あなたは、このように保存する前に、データのインスタンスを取得することができます:

if form.is_valid(): 
    obj = form.save(commit=False) #get instance without saving 
    # do your thing 
    obj.save() #save into database 
関連する問題