0

Djangoでアップロードを機能させようとしています。アップロードしようとしてもエラーは発生せず、新しいアイテムは保存されますが、画像はありません。他のフォームデータはすべてそこにあります。過去 2 日間、Google でスタック オーバーフローが発生しており、修正が見つかりません。どこが悪いのかも分からない!どんなアドバイスも素晴らしいでしょう。本当にありがとう。:)

views.py から:

    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)を渡します。フォームが有効かどうかを確認し、有効であれば保存します。なぜ機能しないのですか?アイテムは保存されますが、管理パネルには「写真」に関連付けられたファイルがありません。

4

1 に答える 1

0

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

pdbも使用

import pdb; pdb.set_trace()

問題を見つける過程であなたを助けることができます(投稿中にすべてがうまくいくかどうかを確認するために、request.FILESを見てください)。

于 2011-12-29T17:02:40.313 に答える