Ошибка формы управления при использовании наборов моделей («данные ManagementForm отсутствуют или подделаны») - PullRequest
6 голосов
/ 10 июля 2010

У меня есть класс models.py как показано ниже

class Educational_Qualification(models.Model):
   user = models.ForeignKey(User)
   exam = models.CharField(max_length=40)
   pass_month = models.CharField(max_length=40)

У меня есть views.py как показано ниже

def create_qualification(request):
 QFormSet = modelformset_factory(Educational_Qualification, extra=3, exclude=("user",))
 if request.method == "POST":
  formset = QFormSet(request.POST, request.FILES)

  if formset.is_valid():
   formset.save()
   for form in formset.forms:
    if form.is_valid():
     quali= form.save(commit=False)
     quali.user = request.user
     quali.save()

    return HttpResponse("Saved")
  else:
   return HttpResponse("Snafu")
 else:
  formset = QFormSet()
 return render_to_response("register/edu.html", {"formset":formset}, context_instance=RequestContext(request)) 

Когда я отправляю форму, она выдает ошибку проверки,Утверждение, что данные ManagementForm отсутствуют или были изменены с '

У меня есть formset.management_form в моем шаблоне.

В чем может быть проблема?

Ответы [ 2 ]

24 голосов
/ 11 июля 2010

Ошибка не в ваших представлениях или моделях, а в шаблонах.

Правильный способ визуализации набора форм:

<form method="post" action="">
    <table>
        {{ formset }}
    </table>
</form>

или

<form method="post" action="">
    {{ formset.management_form }}
    <table>
        {% for form in formset.forms %}
            {{ form }}
        {% endfor %}
    </table>
</form>

Полагаю, вы перебираете формы в шаблонах, не включая форму управления?

0 голосов
/ 02 марта 2015

Это также происходит, если задействовано несколько представлений, и одно из них не знает о префиксе набора форм.

Получить представление:

def someview(request):
...
    formset = Formset(prefix="foo")
...

Просмотр записи (потенциально обработчик отправки формы Ajax):

def ajaxview(request):
...
    formset = Formset(request.POST, prefix="foo")  # here
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...