2009-06-18 5 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} 

Cela semble assez simple, mais chaque fois que je tente de présenter les données (même données inchangées), je reçois cette erreur:sauvegarde des données 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 

Quelqu'un a une idée de ce qui cause cette erreur? S'il y a une erreur dans le formset, qu'est-ce que formset.is_valid() fait d'être vrai? N'importe qui au moins a des idées sur la façon de déboguer cela afin de trouver ce qui va mal? Les deux formes fonctionnent parfaitement bien lorsqu'elles sont utilisées individuellement, et j'ai {{formset.management_form}} dans mon modèle.

Répondre

1

Juste une petite estimation ... votre OpBaseForm exclut-il le modèle pk? Ou, avez-vous manqué le champ pk dans votre modèle? En d'autres termes, si vous disposez vous-même les champs, vous devez toujours inclure le champ pk même s'il est masqué.

+0

Ah c'était ça. Parfois, il suffit d'un ensemble de nouveaux yeux pour résoudre un problème. Merci. – priestc

Questions connexes