0

次のビュー、テンプレート、およびフォームを使用して、フォームセットを実装しています。単一のビュー/テンプレートに複数のフォームセットを実装するつもりですが、フォームセットの数はユーザー入力に基づいて動的です。このコードで複数の動的な数のフォームセットを使用するにはどうすればよいですか? ディクショナリ要素、つまりフォームセットのディクショナリを作成してこれを行うことはできますか??

私の見解は次のとおりです。

def show (request):

 b = request.session["s1"] # count of no of period ids
 c = request.session["s2"] # account number inserted by user
 d = request.session["s3"] # year inserted by customer
 a = account_period.objects.filter(year=d).values('id')
 e = account_period.objects.filter(year=d).values('month')
 f = account_period.objects.filter(id = a).values('year') 
 butt = formset_factory(bu, extra=b)
 if request.method == 'POST'
  formset = butt(request.POST)
  if formset.is_valid():

    z = account_tab.objects.get(account_number=c)
    pr = date.today()
    i=0
    for form in formset.forms:
      x = form.cleaned_data['value']
      y = account_period.objects.get(id=a[i:(i+1)])
      try:
             uip = budget.objects.get(account_no = c,account_period = a[i:(i+1)])
             if uip.budget_amount != x
               uip.budget_amount = x
               uip.save()

      except budget.DoesNotExist:
             w = budget(account_no = z, account_period = y, budget_amount = x, created_by_login = 'me')
             w.save()
      i=i+1
    pass
    return HttpResponse('thanks')

フォームは

class bu(forms.Form):
   value = forms.CharField()

テンプレートは

<html>
<head>
<title>BUDGET</title>
</head>
<body>
<p>BUDGET MANAGEMENTS</p>
<p>Your Account Number is : {{ account_number }}.</p> <p>You Chose {{ period }} {{month}} as period<p>   
{% if form.errors %}
<p style="color: red;">
    Please correct the error{{ form.errors|pluralize }} below.
</p>
{% endif %} 
<form action="." method="post">{% csrf_token %}
{{ formset.management_form }}
<table>
{% for form in formset.forms %}
{{ form }}
{% endfor %}
</table>    
<input type="submit" value="Submit">
</form>
</body>
</html>
#

@ローハン

私のGETメソッドの戻り値には、テンプレートに渡す必要がある多くの変数があるため、次の2つの方法で(提案された変更を適用した後)辞書formsetlistを渡そうとしました

1)

formset = butt( return render_to_response('budgetfinalform.html', {'account_number': c,'period':d,'month':e,'year':f,'formset': formset},context_instance=RequestContext(request))

2)

ctx ={'formsetlist': formset} 

 formset = butt( return render_to_response('budgetfinalform.html', {'account_number': c,'period':d,'month':e,'year':f,ctx,context_instance=RequestContext(request))

しかし、「unboundlocalerror:割り当て前に参照されたローカル変数 'formset'」を取得しました

4

1 に答える 1

0

私は次のようなことをします:

def show (request):
  #initial view processing
  # fomset_count taken as parameter or user input
  formsetlist = []
  #create formset list
  for i in range(0, formset_count):
    formsetlist.append(formset_factory(bu, extra=b))
  # other view related code

 # for GET method    
 ctx = { 'formsetlist': formset }
 return render_to_response('your_template_name', ctx,
                          context_instance = RequestContext(request)
                          )

テンプレート内:

<form action="." method="post">{% csrf_token %}
 {% for formset in formsetlist %}
    {{ formset.management_form }}
    <table>
    {% for form in formset.forms %}
    {{ form }}
    {% endfor %}
    </table>    
{%endfor%}
<input type="submit" value="Submit">
于 2012-07-05T10:02:53.390 に答える