【发布时间】:2016-03-20 10:50:49
【问题描述】:
我在一个视图中有两个表单。一种htlm 形式包括form 和formset,另一种html 形式只包括单一形式。
当我尝试提交单一表单(提醒)时,我收到此错误:
[u'ManagementForm data is missing or has been tampered with']
查看:
form_class = CreateEventForm
second_form_class = modelformset_factory(EventTime, form = EventTimeForm, extra=3, formset=EventTimeFormset)
third_form_class = Reminder
model = Event
template_name = 'eventAdmin.html'
def get_context_data(self, **kwargs):
context = super(EventAdminPage, self).get_context_data(**kwargs)
context['form'] = self.form_class(self.request.POST or None, prefix="form", instance = self.object)
context['formset'] = self.second_form_class(
self.request.POST or None,
prefix="formset",
queryset=context['event_times'])
context['reminder_form'] = Reminder(self.request.POST or None)
return context
def post(self, request, **kwargs):
self.object = self.get_object()
event_times = EventTime.objects.filter(event = self.object).exclude(start_time = None)
if 'update_event_form' in request.POST:
form_class = self.get_form_class()
form = self.form_class(request.POST, prefix="form", instance=self.get_object())
formset = self.second_form_class(request.POST, prefix="formset", queryset=event_times)
if form.is_valid() and formset.is_valid():
event = form.save()
event_times = formset.save()
return HttpResponseRedirect('/event-admin-%s' %self.kwargs['event_id'])
else:
return self.render_to_response(
self.get_context_data(form=form, formset=formset))
if 'reminder_form' in request.POST:
form_class = self.second_form_class
form_name = 'Reminder'
form = form_class(request.POST)
if form.is_valid():
form.save(commit=False)
message = form.cleaned_data.get('text')
return HttpResponseRedirect('/event-admin-%s' %self.kwargs['event_id'])
else:
return self.render_to_response(
self.get_context_data(form=form))
引发错误的表单HTML:
<form method='POST' action=''><input type='hidden' name='csrfmiddlewaretoken' value='3uQyEn4m8bHpM7Jy6a8WKQz5A8Uf6RZF' />
<div id="div_id_text" class="form-group"> <label for="id_text" class="control-label requiredField">
Text<span class="asteriskField">*</span> </label> <div class="controls "> <textarea class="textarea form-control" cols="40" id="id_text" maxlength="500" name="text" rows="10">
</textarea> </div> </div>
<input class="btn btn-primary" type="submit" name="reminder_form" value="Send" />
</form>
【问题讨论】:
-
首先,确保在模板中包含管理表单。其次,您似乎忘记在
if 'reminder_form' in request.POST:块中使用前缀form = form_class(request.POST)。 -
我在两个地方都添加了前缀(创建实例时的上下文方法和 post 方法),还添加了 {{reminder.management_form }}。仍然面临同样的错误
-
张贴您的 html 可能会提供更多亮点。
-
添加了引发错误的表单 html
标签: python django forms formset