14

モデル:

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 であることがわかりましたが、理由を取得する方法がわかりません...

UPD - コメントに従ってテンプレートを更新しました - 何も結果はありません....

(これは非常にばかげたルールです。質問よりも少ないコードを書かなければなりません-コードは自己説明的であり、質問の本質です-ほとんどの場合、質問は1つの文に縮小されますが、コードを削減する方法はありません)

4

1 に答える 1

29

ええ、表示する前に別の空のフォームセットを作成しているためです。を確認するprint formset.errors前または直後に追加します。ifis_valid()

于 2012-05-20T15:46:37.513 に答える