2009-06-18 18 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.is_valid()は「真」になりますか?誰か少なくとも何かが間違っているのを見つけるためにこれをデバッグする方法に関するアイデアはありますか?個別に使用すると両方のフォームが完全に正常に動作し、テンプレートに{{formset.management_form}}があります。

答えて

1

あなたのOpBaseFormはモデルpkを除いていますか?または、テンプレートにpkフィールドがありませんか?つまり、自分でフィールドをレイアウトしている場合は、pkフィールドを隠していてもそれを含める必要があります。

+0

ああそれでした。時には問題を解決するために新鮮な目のセットが必要になることもあります。ありがとう。 – priestc