格式化formset结果值不输入

时间:2012-05-15 20:01:00

标签: django django-templates

我的模板如下:

<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>

但结果允许更改所有字段 - 但我只想要一个。

我认为(除了类别字段之外,请注意“.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,
  })

1 个答案:

答案 0 :(得分:0)

您的问题是readonly值没有传递回服务器,因此您的formset会失败,因为它只接收一个字段。

您希望显示值并设置隐藏字段以存储formset所期望的数据。但我建议采用不同的方法......

最终,formset和form用于显示html表单,而不是为其他任何内容构建。你必须破解它以显示隐藏的小部件,确保用户不能POST任意数据等。相反,我会使用表单框架只显示你的一个可编辑字段。

创建一个只有一个可编辑字段的ModelForm

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 %}