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

Dies scheint ziemlich einfach, aber wenn ich versuche, Daten zu übermitteln (auch unveränderte Daten), bekomme ich diesen Fehler:Speicher inlineformset_factory Daten

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 

Wer noch keine Ahnung hat, was diesen Fehler verursacht? Wenn es im Formset einen Fehler gibt, was ist dann formset.is_valid() wahr? Irgendjemand hat wenigstens irgendwelche Ideen, wie man das debuggt, um herauszufinden, was schief geht? Beide Formen funktionieren perfekt, wenn sie einzeln verwendet werden, und ich habe {{formset.management_form}} in meiner Vorlage.

Antwort

1

Nur eine schnelle Schätzung ... ist Ihre OpBaseForm ohne das Modell PK? Oder vermissen Sie das PK-Feld in Ihrer Vorlage? Mit anderen Worten, wenn Sie die Felder selbst auslegen, müssen Sie immer noch das PK-Feld einfügen, obwohl es versteckt ist.

+0

Ah das war es. Manchmal braucht es nur ein paar frische Augen, um ein Problem zu lösen. Vielen Dank. – priestc

Verwandte Themen