2011-12-25 9 views
2

私はImageFieldを持つ非常に基本的なモデルと、その画像をアップロードするModelFormを持っています。私のフォームは、私のイメージが有効ではないが、私は要求からモデルのイメージを直接インスタンス化すると言って失敗しています。それは完全に動作します。ファイルがアップロードされ、自分のメディアディレクトリに存在します。以下のコードを参照Django ModelFormがファイルを正しく処理しない

また、これは管理センターでも失敗しています。私はそれがないかなり確信している

もの:

  • マルチパート/フォームデータ
  • 間違ったメディアパスは、これらのディレクトリ内の
  • 権限設定を設定。

models.py

class ImageTile(BaseTile): 
    created_at = models.DateTimeField(default=datetime.datetime.now) 
    updated_at = models.DateTimeField(auto_now=True) 
    image = models.ImageField(upload_to='tiles/') 

forms.py

class ImageTileForm(forms.ModelForm): 
    class Meta: 
     model = ImageTile 
     fields = ('image',) 

views.py

if request.method == 'POST': 
    # Then we do image tiles 
    #if request.FILES: 
    image_form = ImageTileForm(request.POST, request.FILES) 
    if image_form.is_valid(): 
     image_form.save() 

テンプレート

<form enctype="multipart/form-data" method="post" action=""> 
    {% csrf_token %} 
    {{ image_form.non_field_errors }} 
    {{ image_form.image.errors }} 
    {{ image_form.image.label_tag }} 
    {{ image_form.image }} 
    <button type="submit">Submit</button> 
    </form> 

image_form.errors手動

>>> from scrapbook.models import ImageTile 
>>> x = ImageTile(image=request.FILES['image']) 
>>> x.save() 
>>> x.id 
2 
>>> x.image 
<ImageFieldFile: tiles/cathy_orange.jpg> 
>>> 
+1

あなたのWebサーバーがアクセスできる方法でPILがインストールされていますか?インタラクティブなPythonセッションやWebサーバーのテスト環境で 'PIL import Image'から何が起こったのかを記録したいかもしれません。あなたのDjangoサーバテストとあなたの対話型環境の間に 'sys.path'の相違を含めることもできます。 –

+0

はい、PILが動作し、うまくインストールされています。 request.FILES辞書を使用して、ImageTileオブジェクトを手動でインスタンス化できることに注意してください。私はImageFieldがPILに依存していると信じています。イメージフィールドにはエラーが発生していないので、意図したとおりに動作していると思います。 –

+1

@Aaron、 "手動で"私はあなたのビュー機能の正確なポイントでPythonデバッガを介して/またはコードを文字通りそのブロックに入れることを意味します。そうでなければ、あなたのビュー環境があなたの端末環境とまったく同じであることを3倍/ 4倍にチェックしてください。ちなみに、私はPILを再構築するまで、アップデート後にOSXでこのメッセージを受けました。 –

答えて

2

問題、それをやってから

django.forms.util.ErrorDict({'image': django.forms.util.ErrorList([u'Upload a valid image. The file you uploaded was either not an image or a corrupted image.' ])}) 

端子出力は、PILがJPEGのサポートを持っていなかったこと、インストール抱えていました。 libjpegをインストールしてPILを再インストールし、すべてがうまくいった。

興味深いことに、Django ModelFormsはこれを検証しますが、モデルには当てはまりません。 width/height属性にアクセスしようとするまで、モデルはエラーを投げなかった。

関連する問題