1

インラインフォームセットを使用しています。メインフォームアプリケーションがあります。次に、2つのフォームセットが採用されます

ビューを実行するとき。ManagementFormデータが欠落しているか、改ざんされているというエラーが表示されます

これが私の見解です

@login_required
def apply(request):
    if request.POST:
        data = {'form-TOTAL_FORMS': u'1','form-INITIAL_FORMS': u'0','form-MAX_NUM_FORMS': u''}
        form = ApplicationForm(request.POST)
        employ_formset = EmploymentFormSet(data)
        qual_formset = QualificationFormSet(data)
        if form.is_valid():
            application = form.save(commit=False)
            employ_formset = EmploymentFormSet(request.POST, instance=application)
            qual_formset = QualificationFormSet(request.POST, instance=application)
            if employ_formset.is_valid() and qual_formset.is_valid():
                application.save()
                employ_formset.save()
                qual_formset.save()
            return HttpResponse('This Worked!!!!!!!!')
    else:
        form = ApplicationForm()
        employ_formset = EmploymentFormSet(instance=Application())
        qual_formset = QualificationFormSet(instance=Application())
    return render_to_response('apply.html', {'form':form, 'employ_formset':employ_formset, 'qual_formse

そして、これが私のテンプレートです。テンプレートを簡単に作成できることに気付きました。しかし、インラインフォームセットをDjangoAdminのように水平に表示したいと思います。

{% extends "base.html" %}
{% load i18n %}

{% block content %}
<form action="." method="post" class="application_form">
    {% csrf_token %}
    <!-- PERSONAL -->
    <h3>Applicant Details</h3><br />
    <table>
      <tr>
        <td><label for="id_title">Title:</label></td>
        <td>{{ form.title }}<small>{{ form.title.errors }}</small></td>
      </tr>
      <tr>
        <td><label for="id_firstname">Firstname:</label></td>
        <td>{{ form.firstname }}<small>{{ form.firstname.errors }}</small></td>
        <td><label for="id_surname">Surname:</label></td>
        <td>{{ form.surname }}<small>{{ form.surname.errors }}</small></td>
      </tr>
      <tr>
        <td><label for="id_address">Address:</label></td>
        <td>{{ form.address }}<small>{{ form.address.errors }}</small></td>
      </tr>
      <tr>
        <td><label for="id_email">Email:</label></td>
        <td>{{ form.email }}<small>{{ form.email.errors }}</small></td>
      </tr>
      <tr>
        <td><label for="id_mobilephone">Mobile Phone:</label></td>
        <td>{{ form.mobilephone }}<small>{{ form.mobilephone.errors }}</small></td>
      </tr>
      <tr>
        <td><label for="id_homephone">Home Phone:</label></td>
        <td>{{ form.homephone }}<small>{{ form.homephone.errors }}</small></td>
      </tr>
    </table>

    <!-- EDUCATION -->
    <br />
    <h3>Employment Details</h3><br />
    {{ employ_formset.management_form }}
    {{ employ_formset.non_form_errors.as_ul }}
    <table id="formset" class="form">
    {% for form in employ_formset.forms %}
      {% if forloop.first %}
      <thead>
        <tr>
        {% for field in form.visible_fields %}
          <th>{{ field.label|capfirst }}</th>
        {% endfor %}
        </tr>
      </thead>
      {% endif %}
      <tr class="{% cycle row1,row2 %}">
      {% for field in form.visible_fields %}
    <td>
    {# Include the hidden fields in the form #}
    {% if forloop.first %}
      {% for hidden in form.hidden_fields %}
        {{ hidden }}
      {% endfor %}
    {% endif %}
    {{ field.errors.as_ul }}
    {{ field }}
    </td>
  {% endfor %}
  </tr>
{% endfor %}
</table>
4

1 に答える 1

1

コードのように管理データのdictを作成する必要はありません。

data = {'form-TOTAL_FORMS': u'1','form-INITIAL_FORMS': u'0','form-MAX_NUM_FORMS': u''}

これはPOSTから取得する必要があります。必要に応じて、 GETリクエストの処理でフォームセットを作成するときにmax_numextraパラメータを使用して適切に変更できます。

于 2012-11-22T09:15:24.820 に答える