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>

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

我认为(请注意“.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

您的问题是只读值没有传递回服务器,因此您的表单集应该失败,因为它只接收一个字段。

您希望显示该值并设置一个隐藏字段来存储表单集期望的数据。但我会推荐一种不同的方法......

最终,表单集和表单用于显示 html 表单,而不是为其他任何东西构建的。您必须破解它以显示隐藏的小部件,确保用户不能发布任意数据等。因此,我将使用表单框架仅显示您的一个可编辑字段。

创建一个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 %}
于 2012-05-15T20:34:12.453 回答