私はDjangoプロジェクトのデータベースに格納されたプロジェクトに画像をアップロードできるようにフォームを使用しようとしていますが、現在使用しているformset
が有効ではないことをコンソールに出力しています。 。Django formsetが無効です - なぜそうではありませんか?
私はプロジェクトに画像をアップロードするために使用しようとしているビューを使用して定義されています
def upload_budget_pdfs(request, project_id):
project = Project.objects.get(id=project_id)
print("Value of project in 'upload_budget_pdfs()': ", project)
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(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.is_valid():
print 'Saving drawing_formset'
print "Before", [b.id for b in project.budget_versions.all()]
for drawing_form in drawing_formset:
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]))
と、このビューが呼び出されたときに、私は取得していますコンソール出力は次のようになります。
("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 >, , , , , , , , , , , , , , , , , '...(remaining elements truncated)...'])
("Value of drawing_formset in 'upload_budget_pdfs()': ", < django.forms.formsets.DrawingFormFormSet object at 0x10cee3790 >)
Drawing formset not valid. []
私のビューのelse
ステートメントはここで実行されているものですが、なぜコンソールが変数がすべて正しいデータを保持していることがわかっているのか分かりません...
どうしたのですか?ここでdrawing_formset
変数を初期化していますか? queryset
私はDrawingUploadFormset(...)
に合格していますか? is_valid()
は実際に何を確認していますか?
編集
drawing_formset
の私の宣言は今あるように私は、受け入れ答えに変更を加えた:
drawing_formset = DrawingUploadFormset(request.POST, request.FILES, prefix="drawings", queryset=Drawing.objects.filter(budget__in=presentations).order_by('budget__presentation_date', 'budget__created'))
しかし、それは私が今、「内部サーバーエラー」を取得していそうですと
MultiValueDictKeyError
行:
for drawing_form in drawing_formset: #This line is what's causing the MultiValueDictKeyError
これはなぜわかりませんか?助言がありますか?
ああ、私はそれが意味があると思う、ありがとう。あなたが答えをしたように、私は 'view'でこれを行いますか?実際のフォーム提出を処理するはずのフォームに 'Submit'ボタンがありますが、これはこの 'view'によって処理されません... – someone2088
投稿が別のビューから来た場合は、 else: 'ブランチ。しかし、フォームセットが有効でないときに何をすべきかを決める必要があります。リダイレクトする必要がある場合(この場合は送信されたデータが失われます)、またはこのビューでフォームをレンダリングする必要があります。 – knbk
ありがとうございました。だから私はそれを与えて、私はそれが正しい方向に私を動かしていると思うが、私は今、フォームを提出するために、[送信]ボタンをクリックすると別のエラーが発生し、PDFをアップロードした...エラーは'AttributeError'と言っています:' 'WSGIRequest 'オブジェクトには' Files 'という属性がありません。 – someone2088