сохранение данных inlineformset_factory - PullRequest
2 голосов
/ 19 июня 2009
@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}

Это кажется довольно простым, но всякий раз, когда я пытаюсь представить данные (даже неизмененные данные), я получаю эту ошибку:

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() делает 'True'? Кто-нибудь, по крайней мере, есть какие-либо идеи о том, как отладить это, чтобы найти, что происходит не так? Обе формы прекрасно работают при индивидуальном использовании, и в моем шаблоне {{formset.management_form}}.

1 Ответ

1 голос
/ 19 июня 2009

Просто быстрое предположение ... ваша OpBaseForm исключает модель ПК? Или вам не хватает поля pk в вашем шаблоне? Другими словами, если вы размечаете поля самостоятельно, вам все равно нужно включить поле pk, даже если оно скрыто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...