0

django について本当に基本的なことを忘れてしまったようです。これが私のviews.pyです:

def sourcedoc_create(request):

if request.method == 'POST': # If the form has been submitted...
    form = SourcedocForm(request.POST, request.FILES) # A form bound to the POST data
    if form.is_valid(): # All validation rules pass
        handle_uploaded_file(request.FILES['doc'])
        form.save()
        return HttpResponseRedirect('/index/') # Redirect after POST
else:
    form = SourcedocForm() # An unbound form
    return render_to_response(
        'sourcedoc_create.html',
        {'form': form},
        RequestContext(request)

urls.py の関連部分は次のとおりです。

url(r'^$', index),
url(r'^index/', index),
url(r'^sourcedoc/create/', sourcedoc_create),

アプリを実行すると、データベースにレコードが作成され、アップロードされたファイルが関連するディレクトリに正常に表示されます (したがって、form.save が正常に機能したと推測されます)。

KeyError at /sourcedoc/create/

0

Request Method:     POST
Request URL:    http://www.rosshartshorn.net/worldmaker/sourcedoc/create/
Django Version:     1.4.3

何らかの理由で HttpResponseRedirect が機能していないようで、再 POST しようとして空白のフォームから KeyError をスローしようとしていますか? か何か。いずれにせよ、リダイレクトではありません。手動で /index/ に移動すると、すべて問題なく、新しいレコードがそこにあります。

リダイレクトの何が問題なのですか?

フォームが関連している場合:

  <body>
{% if form.errors %}
    <p style="color: red;">
        Please correct the error{{ form.errors|pluralize }} below.
    </p>
{% endif %}
<h1>New Post</h1>
<form enctype="multipart/form-data"  action="" method="post">
    <table>
        {{ form.as_table }}
    </table>
    {% csrf_token %}
    <input type="submit" value="Submit">
</form>

また、ModelForms のように動作するはずの mongoforms を使用しています。

from mongodbforms import DocumentForm

class SourcedocForm(DocumentForm):
class Meta:
    document = Sourcedoc
4

1 に答える 1