2009-06-18 80 views
2
@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} 

這看起來非常簡單,但每當我試圖提交數據(甚至未改變的數據),我得到這個錯誤:節約inlineformset_factory數據

Environment: 

Request Method: POST 
Request URL: http://localhost:8000/edit/operation/1/ 
Django Version: 1.0.2 final 
Python Version: 2.6.2 
Installed Applications: 
['main', 
'django_extensions', 
'django.contrib.comments', 
'django.contrib.admindocs', 
'django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.gis', 
'django.contrib.humanize', 
'registration'] 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware') 


Traceback: 
File "/usr/lib/python2.6/dist-packages/django/core/handlers/base.py" in get_response 
    86.     response = callback(request, *callback_args, **callback_kwargs) 
File "/usr/lib/python2.6/dist-packages/annoying/decorators.py" in wrapper 
    55.    output = function(request, *args, **kwargs) 
File "/home/chris/Websites/jobmap/main/views.py" in edit_operation 
    68.   formset.save() 
File "/usr/lib/python2.6/dist-packages/django/forms/models.py" in save 
    389.   return self.save_existing_objects(commit) + self.save_new_objects(commit) 
File "/usr/lib/python2.6/dist-packages/django/forms/models.py" in save_existing_objects 
    403.    obj = existing_objects[form.cleaned_data[self._pk_field.name]] 

Exception Type: KeyError at /edit/operation/1/ 
Exception Value: None 

任何人有任何的想法是什麼原因造成這個錯誤?如果在formset中出現錯誤,那麼formset.is_valid()做的是「真」嗎?任何人至少對如何調試這個問題有任何想法,以便找出發生了什麼問題?這兩種形式單獨使用時工作得很好,我的模板中有{{formset.management_form}}

回答

1

只是一個快速猜測...是你的OpBaseForm排除模型PK?或者,你是否缺少模板中的pk字段?換句話說,如果你自己佈置了字段,即使它隱藏了,仍然需要包含pk字段。

+0

啊,就是這樣。有時候需要一組新的眼睛來解決問題。謝謝。 – priestc 2009-06-19 10:21:10