2

Google App Engine で @wkornewald の django-nonrel と django-filetransfer を使用しています。

ファイルを問題なくアップロードできますが、フォーム全体が有効な場合のみです。フォームがいずれかのフィールドの検証に失敗した場合、変更を修正するためにユーザーに戻るのではなく、完全に失敗します。

エラーメッセージは次のとおりです。


INFO     2011-03-10 20:27:09,496 dev_appserver.py:535] Internal redirection to /admin/rr/member/add/
INFO     2011-03-10 20:27:09,662 dev_appserver_blobstore.py:328] Upload handler returned 200
ERROR    2011-03-10 20:27:09,662 dev_appserver_blobstore.py:341] Invalid upload handler response. Only 301, 302 and 303 statuses are permitted and it may not have a content body.
INFO     2011-03-10 20:27:09,680 dev_appserver.py:3317] "POST /_ah/upload/ag5kbXJvbGxpbnJlbGljc3IcCxIVX19CbG9iVXBsb2FkU2Vzc2lvbl9fGIkBDA HTTP/1.1" 500 -

次のような単純なモデルがあります。


class Member(PhotoMixin, models.Model):
    name = models.CharField(max_length=50)
    name2 = models.CharField(max_length=50, blank=True)

    member_since = models.DateField(blank=True, null=True)
    full_size_image = models.FileField(verbose_name="Photo", upload_to='members/')
    is_active = models.BooleanField(default=True)

これをもっと優雅に処理できる方法はありますか?おそらく、django-filetransfers がフォームを blob アップロード URL に投稿することを望んでおり、その URL が失敗した場合の対処方法がわからないためだと思います。残りが有効な場合にのみ、ほとんどのフォームとアップロード URL への投稿を処理する中間ステップが必要ですか?

4

1 に答える 1

2

Blobstore API では、アップロード ハンドラー ビューがリダイレクトを返す必要があります。

上記のエラーログに次のように記載されています。


Only 301, 302 and 303 statuses are permitted and it may not have a content body.

これを回避するために、ModelAdmin の add_view メソッドと change_view メソッドを変更して、フォーム検証の失敗時にリダイレクトを返すようにしましたが、入力値が失われないようにクエリ文字列を追加しました。

次に、GET 要求でフォームを初期化するときに、クエリ パラメーターの「failed_validation」をチェックして、フォーム データをフォーム/フォームセットに送信することを示し、検証がトリガーされるようにします。

コードは bitbucket にあります: https://aaronmadison@bitbucket.org/aaronmadison/django-filetransfers

これで、blobstore にアップロードしてエラーを処理できるようになりました。

于 2011-03-12T23:14:42.710 に答える