0

Djangoを使ってアップロードをしようとしています。アップロードしようとするとエラーは発生せず、新しい項目は保存されますが、画像はありません。他のフォームデータはすべてそこにあります。私は過去2日間、グーグルでスタックオーバーフローが発生しており、修正を見つけることができません。私はそれが間違っていることを知りません!どんなアドバイスも素晴らしいだろう。本当にありがとう。 :) views.pyからDjangoフォームイメージをアップロードする - フォームデータは画像以外のものを扱います

if request.method == 'POST': 
     form = ItemForm(request.POST, request.FILES, user=request.user, forsale=True) 
     if form.is_valid(): 
      new_item = form.save() 
      return item_view(request, marketplace_id, new_item.id) 
    else: 
     form = ItemForm(user=request.user) 

models.pyから:

class Item(models.Model): 

    photo = StdImageField(upload_to='images/', blank=True, size=(500, 500, True), thumbnail_size=(210, 150, True)) 

    user = models.ForeignKey(User) 
    ... 

    def __unicode__(self): 
     return self.name 

class ItemForm(ModelForm): 
    class Meta: 
     model = Item 
     fields = ['name', 'description', 'price', 'shipping', 'photo', 'section'] 

    def __init__(self, *args, **kwargs): 
     self._user = kwargs.pop('user') 
     super(ItemForm, self).__init__(*args, **kwargs) 

テンプレートから:

<form enctype="multipart/form-data" action="" method="post" data-ajax="false">{% csrf_token %} 
      {% for field in form %} 
       <div class="fieldWrapper" data-role="fieldcontain"> 
        {{ field.errors }} 
        {{ field.label_tag }} {{ field }} 
       </div> 
      {% endfor %} 

     <input type="submit" value="Save"> 
    </form> 

私はそれを見ると、テンプレートが正しいですか。 Itemモデルは上手く見えますが、StdImageFieldはImageFieldのラッパーです。それは管理パネルで正常に動作します。 フォームは上手く見えますが、特別なものはありません。 私のviews.pyでは、POSTリクエストをチェックし、ItemFormを呼び出し、request.POSTとrequest.FILES(そしてforsaleはブール値)を渡します。フォームが有効かどうかチェックし、そうであれば保存します。なぜそれは働いていないのですか?アイテムは保存されますが、管理パネルには「写真」に関連するファイルはありません。

+0

私はデバッグをお勧めします:)また、生成されたフォームhtmlを見て、 'request.FILES'を見るのを助けるかもしれません。 'StdImageField'クラスは正しいですか、それは標準の' ImageField'で動作しますか?他のビューの中で別のビューを呼び出すことも悪い考えです。代わりにリダイレクトが必要です。 – demalexx

答えて

0

"images /"で結合されたMEDIA_ROOTの設定が、Djangoプロセスの有効な書き込み可能なパスであることを確認してください。

またPDB

import pdb; pdb.set_trace() 

を使用すると、(f.i.すべてがポストの間に存在し、OKに見えるかどうかを確認するためにrequest.FILESを見て)、問題を見つけるプロセスであなたを助けることができます。

関連する問題