【发布时间】:2010-11-04 03:29:06
【问题描述】:
@render_to('edit_operation.html')
def edit_operation(request, pk):
from forms import OpBaseForm, OperationForm
from django.forms.models import inlineformset_factory
op = Operation.objects.get(pk=pk)
OpBaseFormSet = inlineformset_factory(Operation, OpBase, form=OpBaseForm, extra=5, )
if request.method == "POST":
form = OperationForm(request.POST, instance=op)
formset = OpBaseFormSet(request.POST, instance=op)
if formset.is_valid() and form.is_valid():
form.save()
formset.save() #error here
return HttpResponseRedirect( op.get_absolute_url() )
else:
form = OperationForm(instance=op)
formset = OpBaseFormSet(instance=op)
return {'operation': op, 'opform': form, 'formset': formset}
这看起来很简单,但是每当我尝试提交数据(甚至是未更改的数据)时,我都会收到以下错误:
环境:
请求方法:POST
请求网址:http://localhost:8000/edit/operation/1/
Django 版本:1.0.2 最终版
Python版本:2.6.2
已安装的应用程序:
['主要的',
'django_extensions',
'django.contrib.cmets',
'django.contrib.admindocs',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.gis',
'django.contrib.humanize',
'登记']
已安装的中间件:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware')
追溯:
get_response 中的文件“/usr/lib/python2.6/dist-packages/django/core/handlers/base.py”
86. 响应 = 回调(请求,*callback_args,**callback_kwargs)
包装器中的文件“/usr/lib/python2.6/dist-packages/annoying/decorators.py”
55. 输出 = 函数(请求,*args,**kwargs)
编辑操作中的文件“/home/chris/Websites/jobmap/main/views.py”
68.formset.save()
保存文件“/usr/lib/python2.6/dist-packages/django/forms/models.py”
389. return self.save_existing_objects(commit) + self.save_new_objects(commit)
save_existing_objects 中的文件“/usr/lib/python2.6/dist-packages/django/forms/models.py”
403. obj = existing_objects[form.cleaned_data[self._pk_field.name]]
异常类型:/edit/operation/1/ 处的 KeyError
异常值:无
有人知道是什么导致了这个错误吗?如果表单集中有错误,那么 formset.is_valid() 的“真”是什么?任何人至少对如何调试它以找出问题所在有任何想法?这两种形式单独使用时都可以正常工作,而且我的模板中有{{formset.management_form}}。
【问题讨论】:
标签: django django-forms