Я работаю с формами впервые и получаю эту ошибку. Это интересно, потому что у меня есть версия этого представления «Создать» и версия «Редактировать». Набор форм отлично работает при создании нового объекта, но когда я пытаюсь изменить его, я получаю эту проблему. Я видел в Интернете, что это связано с 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'"