<form method="POST" enctype="multipart/form-data" data-vat-status="{{project.vat_status}}" data-view-url="{% url 'projects:concept_save_ajax_2' project.id %}" class="autosave_form formset full-width" action="{% url 'projects:upload_budget_pdfs' project.id %}"> {% csrf_token %} <div id="presentations" class="app-wrap center-apps middle"> {% with get|apps:'Budgets' as costing_app %} {% for presentation in presentations %} <div id="presentation-{{presentation.id}}" class="app sm {% if presentation.current_marker %}{{costing_app.color}}{% else %}{{app.color}}{% endif %}"> <a href="" class="filler"></a> <a class="show-presentation bottom-right" name="presentation-{{presentation.id}}"><img class="icon" src="{% static 'img/edit-white.png' %}"></a>
<ul class="flush"> <li class=""><h2 class="p-t-lg">Presentation {{forloop.counter}}</h2></li> <li>{{presentation.presentation_date|date:"d M y"|xor}}</li> <li>{{presentation.details|xor|truncatechars:50}}</li> {% if presentation.current_marker %}<li>({% if project.deposit_received%}Deposit{% else %}Current{% endif %} budget)</li>{% endif %} </ul> </div> {% if forloop.last %} {% endif %}
{% endfor %} {# Add a new presentation #} <div id="presentation-new" class="app sm {{costing_app.color}} outline"> <a id="new_presentation" data-view-url="{% url 'projects:save_new_presentation' project.id %}" class="filler show-presentation" name="presentation-new"></a> <a name="presentation-new"></a> <span class="big-head">+</span> <h2 class="no-m">Add presentation</h2></li> </div> {% endwith %} </div>
<div class="middle"> {{presentation_formset.management_form}} {{drawing_formset.management_form}}
<div class="col-9 centered-block p-t-lg"> <table class="left fixed text-sm slim"> {# New presentation without budget #} <tbody> </tbody>
{# Edit presentation details #} {% for presentation_form in presentation_formset %} <tbody id="pres{{forloop.counter}}" class="presentation-form" name="presentation-{{presentation_form.instance.id|xor:'new'}}" style="display: none;"> {% if not forloop.last and presentation_form.instance.budget_items.count %} <tr class="split-rows"> <td colspan="3">Exc VAT {% if not presentation_form.instance.current_marker %}{{presentation_form.instance.grand_total_exc_vat|money:'£'}}{% else %}{{project.budget_overview.updated_exc_vat|money:'£'}}{% endif %}</td> <td colspan="3">Inc VAT {% if not presentation_form.instance.current_marker %}{{presentation_form.instance.grand_total_inc_vat|money:'£'}}{% else %}{{project.budget_overview.updated_inc_vat|money:'£'}}{% endif %}</td> </tr> {% endif %} <tr> {% for hidden in presentation_form.hidden_fields %} <td class="hidden">{{ hidden }}</td> {% endfor %} </tr> {% for field in presentation_form.visible_fields %} <tr class="split-rows"> {% if not field.name == 'pdf_package_dep' %} <td colspan="6"><label>{{field.label}}</label></td> {% endif %} </tr> <tr class="split-rows"> <td colspan="6"> {% if not field.name == 'pdf_package_dep' %} {% if field.name == 'presentation_date' %} {% with presentation_form.instance.meeting as meeting %} {% include "projects/includes/meeting_bit.html" with employee=request.user.employee meeting=meeting UID=presentation_form.instance.id %} {% endwith %} {# <a class="ical_trigger button" data-view-url="{% url 'events:add_to_cal' %}" {% if not field.value %}style="display:none"{% endif %}>Add to calendar</a> #} {% else %} {{field}} {% endif %} {% endif %} </td> </tr> {% endfor %} {% if presentation_form.instance.id %} {# PDF uploads #} {% with drawing_form=drawing_formset|getval:forloop.counter0 %} {# budget_pdf_form=budget_pdf_formset|getval:forloop.counter0 #} <tr> {% if not forloop.last %} <td colspan="3"><label>Budget PDF package</label></td> {% endif %}
<td colspan="3"><label>Drawings</label></td> </tr> <tr> {% if not forloop.last %} <td colspan="3" class="center"> {% if presentation_form.instance.pdf_package_dep %} <a class="button file-download pdf" href="{% url 'costing:pdf_open' presentation_form.instance.id %}?pdf=package_dep" target="_blank"></a><a class="pdf-clear" data-view-url="{% url 'costing:pdf_clear' presentation_form.instance.id %}?pdf=package_dep"><img class="icon m-l-sm m-b-md" src="{% static "img/bin.png" %}"></a> {% else %} {{presentation_form.pdf_package_dep}} {% endif %} </td> {% endif %} {% for d_field in drawing_form.visible_fields %} {% if drawing_form.instance.pdf %} <td colspan="3" class="center"> <a class="button file-download pdf" href="{% url 'costing:pdf_open' presentation_form.instance.id %}?pdf=drawings" target="_blank"></a><a class="pdf-clear" data-view-url="{% url 'costing:pdf_clear' presentation_form.instance.id %}?pdf=drawings"><img class="icon m-l-sm m-b-md" src="{% static "img/bin.png" %}"></a> </td> {% else %} <td colspan="3">{{d_field}}</td> {% for d_hidden in drawing_form.hidden_fields %} <td class="hidden">{{d_hidden}}</td> {% endfor %} {% endif %} {% endfor %} <tr> <td colspan="1" class="p-t-md"></td> <td colspan="4" class="p-t-md"><input type="submit" value="upload"></td> <td colspan="1" class="p-t-md"></td> </tr> </tr> {% endwith %} {% endif %}
<tr> <td colspan="3">
<a class="button email_trigger m-t-md" style="width:auto;" data-view-url="{% url 'comms:open_email_template' project.id %}?template=6&budget={{presentation_form.instance.id}}">Email client meeting report</a> </td> </tr>
<tr> <td class="p-t-md"> <a {% if forloop.last %}id="refresh_presentations"{% endif %}class="update_presentation button fill">Done</a> </td> <td colspan="2"> {% if presentation_form.instance.id and not presentation_form.instance.budget_items.count %} <a class="button fill" href="{% url 'costing:delete_presentation' presentation_form.instance.id %}">Delete</a> {% endif %} </td> </tr> </tbody>
{% endfor %} </table> </div> </div> </form>
and the view that is called when clicking the 'Submit' button on the form is:
def upload_budget_pdfs(request, project_id): project = Project.objects.get(id=project_id) print("Value of project in 'upload_budget_pdfs()': ", project)
if request.method == 'POST':
presentations = project.budget_versions.select_related('meeting').prefetch_related('budget_items', 'cci_items', 'presenters').filter(version_number__isnull=False).annotate(vn=F('version_number') * -1).order_by('presentation_date', 'created', '-vn') print("Value of presentations in 'upload_budget_pdfs()': ", presentations) drawing_formset = DrawingUploadFormset(request.POST, request.FILES, prefix="drawings", queryset=Drawing.objects.filter(budget__in=presentations).order_by('budget__presentation_date', 'budget__created'))
print("Value of drawing_formset in 'upload_budget_pdfs()': ", drawing_formset)
if drawing_formset: print 'Saving drawing_formset' print "Before", [b.id for b in project.budget_versions.all()] for drawing_form in drawing_formset: # This line is what's causing the MultiValueDictKeyError if drawing_form.instance.budget: print 'Instance', drawing_form.instance.budget drawing = drawing_form.save(commit=False) drawing.budget = drawing_form.instance.budget drawing.save() print drawing, [b.id for b in project.budget_versions.all()] else: print("Drawing formset not valid. ", drawing_formset.errors)
budget_formset = BudgetPresentationFormset(request.POST, request.FILES, instance=project, prefix="presentations")
if budget_formset.is_valid() and budget_formset.has_changed(): updated_budget_presentations = budget_formset.save() elif budget_formset.has_changed(): print 'Budget formset not valid.',budget_formset.errors
return HttpResponseRedirect(reverse('projects:concept', args=[project_id]))
Currently, when I view this page in the browser, and the form is displayed, I can upload an image file to the form by clicking on the 'Upload' button, selecting the file, and pressing 'Ok'. I can see that the file has been 'attached' to the form correctly, as its name is displayed next to the 'Upload' button on the form.
MultiValueDictKeyError at /projects/6215/upload-budget-pdf/
"u'drawings-4-id'"
Request Method: POST Request URL: http://localhost:8000/projects/6215/upload-budget-pdf/ Django Version: 1.9.1 Exception Type: MultiValueDictKeyError Exception Value: "u'drawings-4-id'"Exception Location: /Users/.../.virtualenvs/moon/lib/python2.7/site-packages/django/utils/datastructures.py in __getitem__, line 85 Python Executable: /Users/.../.virtualenvs/moon/bin/python Python Version: 2.7.6 Python Path: ['/Users/.../Documents/Dev/moonhub/moon', '/Users/beckysmith/Documents/Dev/moonhub/moon/moon', '/usr/local/bin', '/Users/.../Documents/Dev/moonhub/moon', '/Users/.../.virtualenvs/moon/lib/python27.zip', '/Users/.../.virtualenvs/moon/lib/python2.7', '/Users/.../.virtualenvs/moon/lib/python2.7/plat-darwin', '/Users/.../.virtualenvs/moon/lib/python2.7/plat-mac', '/Users/.../.virtualenvs/moon/lib/python2.7/plat-mac/lib-scriptpackages', '/Users/.../.virtualenvs/moon/Extras/lib/python', '/Users/.../.virtualenvs/moon/lib/python2.7/lib-tk', '/Users/.../.virtualenvs/moon/lib/python2.7/lib-old', '/Users/.../.virtualenvs/moon/lib/python2.7/lib-dynload', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/Users/elgan/.virtualenvs/moon/lib/python2.7/site-packages']Server time: Fri, 27 Jan 2017 08:48:54 +0000
("Value of project in 'upload_budget_pdfs()': ", <Project: Test 1>)
("Value of presentations in 'upload_budget_pdfs()': ", [<Budget: Test 1: Version -1>, <Budget: Test 1: Version -1>, <Budget: Test 1: Version 0>, <Budget: Test 1: Version 0>, <Budget: Test 1: Version 0>, <Budget: Test 1: Version 3>, <Budget: Test 1: Version 0>, <Budget: Test 1: Version 1234>, <Budget: Test 1: Version 1234>, <Budget: Test 1: Version 1234>, <Budget: Test 1: Version 1234>, <Budget: Test 1: Version 1234>, <Budget: Test 1: Version 1234>, <Budget: Test 1: Version 1234>, <Budget: Test 1: Version 1234>, <Budget: Test 1: Version 1234>, <Budget: Test 1: Version 1234>, <Budget: Test 1: Version 1234>, <Budget: Test 1: Version 1234>, <Budget: Test 1: Version 1234>, '...(remaining elements truncated)...'])
("Value of drawing_formset in 'upload_budget_pdfs()': ", <django.forms.formsets.DrawingFormFormSet object at 0x107036110>)
Saving drawing_formset
Before [3690L, 3691L, 3693L, 3695L, 3696L, 3697L, 3707L, 3709L, 3726L, 3727L, 3745L, 3747L, 3748L, 3749L, 3750L, 3757L, 3763L, 3766L, 3769L, 3770L, 3771L, 3772L, 3801L, 3802L, 3866L, 3867L, 3868L, 3869L, 3870L, 3871L, 3872L, 3873L, 3874L, 3875L, 3876L, 3877L, 3878L, 3879L, 3880L, 3881L, 3882L, 3883L, 3884L, 3885L, 3886L, 3887L, 3888L, 3889L, 3890L, 3891L, 3892L, 3893L, 3894L, 3895L, 3896L, 3897L, 3898L, 3899L, 3900L]
Internal Server Error: /projects/6215/upload-budget-pdf/
Traceback (most recent call last):
File "/Users/.../.virtualenvs/moon/lib/python2.7/site-packages/django/core/handlers/base.py", line 140, in get_response
response = middleware_method(request, callback, callback_args, callback_kwargs)
File "/Users/.../Documents/Dev/moonhub/moon/moon/middleware.py", line 72, in process_view
return permission_required(required_permission)(view_func)(request,*view_args,**view_kwargs)
File "/Users/.../.virtualenvs/moon/lib/python2.7/site-packages/django/contrib/auth/decorators.py", line 23, in _wrapped_view
return view_func(request, *args, **kwargs)
File "/Users/.../Documents/Dev/moonhub/moon/projects/views.py", line 1034, in upload_budget_pdfs
for drawing_form in drawing_formset: #ERF(24/01/2017 @ 1610) This line is what's causing the MultiValueDictKeyError
File "/Users/.../.virtualenvs/moon/lib/python2.7/site-packages/django/forms/formsets.py", line 74, in __iter__
return iter(self.forms)
File "/Users/.../.virtualenvs/moon/lib/python2.7/site-packages/django/utils/functional.py", line 33, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/Users/.../.virtualenvs/moon/lib/python2.7/site-packages/django/forms/formsets.py", line 144, in forms
for i in range(self.total_form_count())]
File "/Users/.../.virtualenvs/moon/lib/python2.7/site-packages/django/forms/models.py", line 587, in _construct_form
pk = self.data[pk_key]
File "/Users/.../.virtualenvs/moon/lib/python2.7/site-packages/django/utils/datastructures.py", line 85, in __getitem__
raise MultiValueDictKeyError(repr(key))
MultiValueDictKeyError: "u'drawings-4-id'"
[27/Jan/2017 10:16:48] "POST /projects/6215/upload-budget-pdf/ HTTP/1.1" 500 205382
for drawing_form in drawing_formset:
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/d32da406-a1b4-4e59-b50c-d9a352c8d77f%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
No comments:
Post a Comment