0

我正在尝试使用 Django 进行上传。我尝试上传时没有收到错误消息,并且保存了新项目,但没有图像。其他表单数据都在那里。在过去的 2 天里,我一直在谷歌搜索和堆栈溢出,但找不到修复程序。我也不知道哪里错了!任何建议都会很棒。非常感谢。:)

来自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 回答