代码之家  ›  专栏  ›  技术社区  ›  Van Gale

如何在Django中保存内联表单集模型?

  •  3
  • Van Gale  · 技术社区  · 17 年前

    表单集有一个.save()方法,并且 documentation

    if request.method == "POST":
        formset = BookInlineFormSet(request.POST, request.FILES, instance=author)
        if formset.is_valid():
            formset.save()
            # Do something.
    else:
        formset = BookInlineFormSet(instance=author)
    

    我遵循这一点,它在创建父对象时工作,但在Django中保存现有模型时出现异常。父对象实际上保存到数据库中,并且在保存相关模型时发生异常。

    KeyError at /bcdetails/NewProds/1/
    
    None
    
    Request Method:     POST
    Request URL:    http://rdif.local/bcdetails/NewProds/1/
    Exception Type:     KeyError
    Exception Value:    
    
    None
    
    Exception Location:     /usr/lib/python2.5/site-packages/django/forms/models.py in save_existing_objects, line 403
    Python Executable:  /usr/bin/python
    Python Version:     2.5.2
    Python Path:    ['/usr/lib/python2.5/site-packages/paramiko-1.7.4-py2.5.egg', '/usr/lib/python2.5/site-packages/Fabric-0.0.9-py2.5.egg', '/usr/lib/python2.5', '/usr/lib/python2.5/plat-linux2', '/usr/lib/python2.5/lib-tk', '/usr/lib/python2.5/lib-dynload', '/usr/local/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages/Numeric', '/usr/lib/python2.5/site-packages/PIL', '/usr/lib/python2.5/site-packages/gst-0.10', '/var/lib/python-support/python2.5', '/usr/lib/python2.5/site-packages/gtk-2.0', '/var/lib/python-support/python2.5/gtk-2.0', '/usr/lib/site-python', '/home/www/rdif.com/test/']
    Server time:    Wed, 7 Jan 2009 23:18:19 -0700
    

    我在Django source呆了一段时间,但在那里找不到任何东西。我是否需要遍历每个表单集并只保存已更改的模型?

    1 回复  |  直到 17 年前
        1
  •  4
  •   Van Gale    17 年前

    我发现了我的问题,很尴尬。

    在我的父模型表单中 exclude = ('...',) 在元类中,其中一个排除的字段对于内联表单集中的关系至关重要。因此,我删除了模板中的排除项并忽略这些字段。