0

私のテンプレートは次のようになります:

<form method="post" action="">
  {{ formset.management_form }}
  {% for form in formset.forms %}
    {{ form.contractor }} {{ form.date }} {{ form.value }} {{ form.comment }} {{ form.operation_type }} {{ form.category }} {{ form.account }}
  {% endfor %}
</form>

しかし、結果はすべてのフィールドを変更できますが、1つだけが必要です。

(カテゴリフィールド以外の「.value」に注意してください)が問題を解決すると思いましたが、そうではありません。

<form method="post" action="">
  {{ formset.management_form }}
  {% for form in formset.forms %}
    {{ form.contractor.value }} {{ form.date.value }} {{ form.value.value }} {{ form.comment.value }} {{   form.operation_type.value }} {{ form.category }} {{ form.account.value }}
  {% endfor %}
</form>

UPD : 関連するビュー コード

def detail(request, category_id):
  from django.forms.models import modelformset_factory
  OperationFormSet = modelformset_factory(Operation)
  if request.method == "POST":
    formset = OperationFormSet(request.POST, request.FILES,
                                queryset=Operation.objects.filter(category=category_id))
    if formset.is_valid():
      formset.save()
      # Do something.
  else:
    formset = OperationFormSet(queryset=Operation.objects.filter(category=category_id))
  return render_to_response("reports/operation_list.html", {
    "formset": formset,
  })
4

1 に答える 1

0

問題は、読み取り専用の値がサーバーに戻されないことです。したがって、フォームセットは1つのフィールドしか受信しないため、失敗するはずです。

値を表示し、フォームセットが期待するデータを格納するための非表示フィールドを設定する必要があります。しかし、私は別のアプローチをお勧めします...

最終的に、フォームセットとフォームはhtmlフォームを表示するために使用され、他の目的のために構築されることはありません。非表示のウィジェットを表示するにはハックする必要があり、ユーザーが任意のデータをPOSTできないようにする必要があります。代わりに、フォームフレームワークを使用して編集可能なフィールドを1つだけ表示します。

ModelForm編集可能なフィールドが1つしかないを作成します

class MyModelForm(forms.ModelForm):
    class Meta:
        model = Operation
        fields = ('category',)

MyModelFormSet = modelformset_factory(Operation, form=MyModelForm)

テンプレートに値を表示する場合、ModelFormsは、を介してインスタンスに直接アクセスできるform.instance必要があるため、次のようなことができるはずです。

{% for form in formset %}
   {{ form.instance.some_attribute }}
   {{ form.category }} 
{% endfor %}
于 2012-05-15T20:34:12.453 に答える