【问题标题】:saving inlineformset_factory data保存 inlineformset_factory 数据
【发布时间】: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


    【解决方案1】:

    只是一个快速的猜测......你的 OpBaseForm 不包括模型 pk 吗?或者,您是否缺少模板中的 pk 字段?换句话说,如果您自己布置字段,您仍然需要包含 pk 字段,即使它是隐藏的。

    【讨论】:

    • 啊,就是这样。有时只需要一双新的眼睛就能解决问题。谢谢。
    猜你喜欢
    • 2019-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 2016-02-21
    相关资源
    最近更新 更多