2017-07-09 10 views
0

私はDjangoビューを提出して処理しようとしています。フォームがループしていないときに表示されます。DJANGO

私はHTMLテンプレートにパススルーしようとしているModelFormを持っています。今ではフォームを使ってループしたいので、ループするたびにフィールド名に接頭辞を付けて、簡単に処理できるようにしたい。

私は今、アイテムのそれぞれを正しくループしてプレフィックスを追加しているビューですが、HTMLテンプレートに渡されて表示されるときに、最後のテンプレートの結果しか取得しませんフォーム。私はそれをどうやって起こさせるのか、それを働かせるためには何をする必要があるのか​​は分かりません。ここで

は、私が持っている図である。ここでは

def addTransaction(request, groupId, recordId): 
    user = User.objects.get(username='omar') 
    group = Group.objects.get(id=groupId) 
    record = Record.objects.get(id=recordId) 
    transactions = Transaction.objects.all() 
    if request.method == 'POST': 
     if record.split == 1: 
      form = EvenSplitTransactionForm(request.POST) 
      if form.is_valid(): 
       cd = form.cleaned_data 
       amount = cd['amount'] 
       description = cd['description'] 
       split_amount = SplitEven(record, amount) 
       for trans in transactions: 
        if trans.record.id == record.id: 
         trans.description = description 
         trans.amount = split_amount 
         trans.save() 
       return redirect('accounts') 
     if record.split == 2: 
      form = IndividualSplitTransactionForm(request.POST) 
     return redirect('accounts') 
     #-------------------------------------------------------- 
    else: 
     if record.split == 1: 
      form = EvenSplitTransactionForm() 
      message = 'fill out the form below' 
      parameters = { 
       'record':record, 
       'form':form, 
       'message':message, 
       'transactions':transactions, 
      } 
      return render(request, 'tabs/add_even_transactions.html', parameters) 
     if record.split == 2: 
      message = 'fill out the form below' 
      for trans in transactions: 
       if trans.record.id == record.id: 
        print(trans.user.username) 
        form = IndividualSplitTransactionForm(prefix=trans.user.username) 
        print(form) 
      parameters = { 
       'record':record, 
       'form':form, 
       'message':message, 
       'transactions':transactions, 
      } 
      return render(request, 'tabs/add_individual_transaction.html', parameters) 

は、フォームがループを通過していると表示されているものです。

hani 
<tr><th><label for="id_hani-amount">Amount:</label></th><td><input id="id_hani-amount" name="hani-amount" step="0.01" type="number" value="0.0" /></td></tr> 
<tr><th><label for="id_hani-description">Description:</label></th><td><input id="id_hani-description" maxlength="250" name="hani-description" type="text" /></td></tr> 
rana 
<tr><th><label for="id_rana-amount">Amount:</label></th><td><input id="id_rana-amount" name="rana-amount" step="0.01" type="number" value="0.0" /></td></tr> 
<tr><th><label for="id_rana-description">Description:</label></th><td><input id="id_rana-description" maxlength="250" name="rana-description" type="text" /></td></tr> 
amer 
<tr><th><label for="id_amer-amount">Amount:</label></th><td><input id="id_amer-amount" name="amer-amount" step="0.01" type="number" value="0.0" /></td></tr> 
<tr><th><label for="id_amer-description">Description:</label></th><td><input id="id_amer-description" maxlength="250" name="amer-description" type="text" /></td></tr> 

とここに表示されているhtmlです:

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
    <link href="/static/css/blog.css" rel="stylesheet"> 
</head> 
<body> 
    <div id="content"> 

    <h1>Add members to </h1> 

    <p>fill out the form below</p> 

    <form action="." method="POST"> 
    <input type='hidden' name='csrfmiddlewaretoken' value='Gnb1o5rbKqkoegYCX5biYwtZgK3XMXBa' /> 
    <p><label for="id_amer-amount">Amount:</label> <input id="id_amer-amount" name="amer-amount" step="0.01" type="number" value="0.0" /></p> 
<p><label for="id_amer-description">Description:</label> <input id="id_amer-description" maxlength="250" name="amer-description" type="text" /></p> 
    <p>Tax: <input type="text" name="tax" value=""></p> 
    <p>Tip: <input type="text" name="tip" value=""></p> 
    <input type="submit" name="submit" value="submit"> 
    </form> 

    </div> 
</body> 
</html> 

がどのようにして作成されているフォームのすべての3つは、HTMLテンプレートに渡すために得ることができますか?可能であれば、htmlファイルではなく、すべての処理と割り当てをview.pyファイルで行いたいと思います。

UPDATE

これは私が持っているHTMLテンプレートです:

{% extends "base.html" %} 

{% block content %} 
    <h1>Add members to {{record.name}}</h1> 
    {% if message %} 
    <p>{{message}}</p> 
    {% endif %} 
    <form action="." method="POST"> 
    {% csrf_token %} 
    {{ form.as_p }} 
    <p>Tax: <input type="text" name="tax" value=""></p> 
    <p>Tip: <input type="text" name="tip" value=""></p> 
    <input type="submit" name="submit" value="submit"> 
    </form> 
{% endblock %} 
+0

2番目のスニペットはテンプレートコードですか?私はパラメータがどこで使用されているかわかりません。 – Park

+0

これは、サイクルごとにフォームを印刷するときにコマンドラインに表示されるものです... –

+0

テンプレートコードを投稿できますか? – Park

答えて

0

あなたはジャンゴでformset機能を使用することができます。テンプレート内のフォームを使用するための
、のようなビューファイルにコードを追加します。

... 
from django.forms import formset_factory 
... 
ISTFormSet=formset_factory(IndividualSplitTransactionForm,extra=3) 

、パラメータとしてテンプレートにISTFormsetを渡します。私は自分のフォームの実際のパラメータが何であるかを知らない

... 
<form action="." method="POST"> 
{% csrf_token %} 
{% for form in ISTFormset %} 
{{ form.as_p }} 
{% endfor %} 
<p>Tax: <input type="text" name="tax" value=""></p> 
<p>Tip: <input type="text" name="tip" value=""></p> 
<input type="submit" name="submit" value="submit"> 
</form> 
... 

:テンプレートファイルで
は、あなたは次のようにそれを使用することができます。あなたはコードを編集することができますが、アイデアは同じです。
forステートメントで投稿データをビューファイルに受信できます。
詳細については、上記のリンクを参照してください。たくさんの機能があります。

関連する問題