2009-06-18 3 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

OpkaseForm은 모델 pk를 제외하고 있습니까? 아니면 템플릿에 pk 필드가 누락 되었습니까? 다른 말로하면, 자신이 필드를 레이아웃하는 경우 pk 필드가 숨겨진 경우에도 포함시켜야합니다.

+0

아 그게 다야. 때로는 문제를 해결하기 위해 신선한 눈빛이 필요합니다. 감사. – priestc