【问题标题】:form is not valid... WHY?表格无效...为什么?
【发布时间】:2012-05-20 10:39:06
【问题描述】:

型号:

class Operation(models.Model):
  operation_type = models.ForeignKey(OperationType)
  category = models.ForeignKey(Category, default=0)
  related_account = models.ForeignKey(Account, related_name = 'related_account', null = True)
  comments = models.TextField(null = True)

代码:

def detail(request, category_id):
  class OperationCategoryOnlyForm(forms.ModelForm):
    class Meta:
      model = Operation
      fields = ('operation_type', 'category', 'related_account', )

  from django.forms.models import modelformset_factory
  OperationFormSet = modelformset_factory(Operation, form=OperationCategoryOnlyForm)
  if request.method == "POST":
    formset = OperationFormSet(request.POST, queryset=Operation.objects.filter(category=category_id))
    if formset.is_valid():
      formset.save()
# HERE IS THE FORMSET, WHICH OVERLAPS THE POSTED FORMSET - this was intentionaly to get the current result not result before save, but when you want to debug - you should pay attention at such things.    
#  formset = OperationFormSet(queryset=Operation.objects.filter(category=category_id))

  c = {"formset" : formset,}
  c.update(csrf(request))
  return render_to_response("reports/operation_list.html", c)

模板:更新:

<form method="post" action="">
  {% csrf_token %}
  {{ formset.management_form }}
  {{ formset.errors }}
  {{ formset.non_field_errors }}
  {{ formset.non_form_errors }}
<table>
 {% for form in formset.forms %}
tr><td> {{ form.errors }} </td><td> {{ form.non_field_errors }}</td></tr>
<tr><td>{{ form.id }}</td><td>{{ form.instance.comments }}</td><td>{{ form.operation_type }}<br>{{ form.related_account }}</td><td>{{ form.category }}</td></tr>
  {% endfor %}
</table>
<input type="submit" value="submit">
</form>

我发现 form.is_valid() = false - 但我不知道如何得到原因 WHY...

UPD - 我根据评论更新了模​​板 - 没有结果......

(这是非常愚蠢的规则,我必须编写比问题更少的代码 - 代码是自我解释的,是问题的本质 - 几乎总是问题会简化为一句话,但没有办法减少代码)

【问题讨论】:

  • {{ formset.errors }}{{ formset.non_field_errors }}{{ form.errors }}{{ form.non_field_errors }} 放在html 中的某处。
  • 规则的存在是有原因的。至少你应该描述你已经尝试过的东西。
  • 不幸的是,formset.errors 和任何提案都不会导致结果。
  • 也可以试试{{ formset.non_form_errors }}
  • 我想知道 OperationCategoryOnlyForm 类中的字段顺序是否重要

标签: django django-templates


【解决方案1】:

是的,因为您在显示之前创建了另一个空表单集。在if 之前或之后直接添加print formset.errors 以检查is_valid()

【讨论】:

  • 你是对的!!!!我忘了我创建了新的表单集,因为我不想看到旧的表单集(保存之前)我跑去更改它,几分钟后我会告诉你错误
猜你喜欢
  • 1970-01-01
  • 2015-07-31
  • 2020-06-07
  • 1970-01-01
  • 1970-01-01
  • 2013-01-30
  • 2017-12-16
  • 2017-07-22
  • 1970-01-01
相关资源
最近更新 更多