Django Ошибка Formset MultiValueDictKey при редактировании объекта - PullRequest
0 голосов
/ 20 апреля 2020

Я работаю с формами впервые и получаю эту ошибку. Это интересно, потому что у меня есть версия этого представления «Создать» и версия «Редактировать». Набор форм отлично работает при создании нового объекта, но когда я пытаюсь изменить его, я получаю эту проблему. Я видел в Интернете, что это связано с form.id, но я не думаю, что это так, или я чувствую, что не смогу успешно использовать представление создания. Есть мысли о том, как я могу попытаться решить эту проблему? В сообщении об ошибке выделяется строка manifests = form2.save(commit=False)

views.py

def EditProformaView(request, pk):
    ManifestForm= modelformset_factory(ProformaManifest, fields =('ProductCode', 'DescriptionOfGoods', 'UnitQty', 'Type','Amount', 'Price'))
    item = get_object_or_404(Proforma, pk=pk)
    if request.method == "POST":
        form = ProformaForm(request.POST, instance=item)
        form2 = ManifestForm(request.POST)
        if form.is_valid():


                new_proforma = form.save()
                manifests = form2.save(commit=False) #this is the line that creates the error
                for manifest in manifests:
                    manifest.proforma = new_proforma
                    manifest.save()


                data = form.cleaned_data #get the data from the form
                manifestData = form2.cleaned_data
                context = {
                    'data': data,
                    'manifestData': manifestData,
                }
                pdf = render_to_pdf('proforma_preview.html', context)

               ...



                messages.success(request, "Success: Proforma Has Been Created!")
                return redirect('HomeView')

        else:
            ...


    else:
        form = ProformaForm(instance=item)
        qs = ProformaManifest.objects.filter(proforma=pk)
        form2 = ManifestForm(queryset = qs)

        context = {
            'form': form,
            'form2': form2,
        }
        return render(request, 'proforma.html', context)



Traceback:
Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/edit/proforma_invoice/46/

Django Version: 1.11
Python Version: 2.7.10
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'Poseidon',
 'crispy_forms',
 'bootstrap_modal_forms']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "/Library/Python/2.7/site-packages/django/core/handlers/exception.py" in inner
  41.             response = get_response(request)

File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/Library/Python/2.7/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
  23.                 return view_func(request, *args, **kwargs)

File "/Users/andrews/Desktop/WBU2/Poseidon/views.py" in EditProformaView
  442.                 form2.save()

File "/Library/Python/2.7/site-packages/django/forms/models.py" in save
  649.         return self.save_existing_objects(commit) + self.save_new_objects(commit)

File "/Library/Python/2.7/site-packages/django/forms/models.py" in save_existing_objects
  751.         if not self.initial_forms:

File "/Library/Python/2.7/site-packages/django/forms/formsets.py" in initial_forms
  189.         return self.forms[:self.initial_form_count()]

File "/Library/Python/2.7/site-packages/django/utils/functional.py" in __get__
  35.         res = instance.__dict__[self.name] = self.func(instance)

File "/Library/Python/2.7/site-packages/django/forms/formsets.py" in forms
  144.                  for i in range(self.total_form_count())]

File "/Library/Python/2.7/site-packages/django/forms/models.py" in _construct_form
  591.             pk = self.data[pk_key]

File "/Library/Python/2.7/site-packages/django/utils/datastructures.py" in __getitem__
  85.             raise MultiValueDictKeyError(repr(key))

Exception Type: MultiValueDictKeyError at /edit/proforma_invoice/46/
Exception Value: "u'form-0-id'"


...