【问题标题】:Django Forms uploading image - form data works except for imageDjango Forms上传图像 - 表单数据除图像外有效
【发布时间】:2011-12-27 11:07:26
【问题描述】:

我正在尝试使用 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,它是一个布尔值)。我检查表格是否有效,如果有效,我保存它。为什么它不起作用?该项目已保存,但在管理面板中没有与“照片”关联的文件。

【问题讨论】:

  • 我建议调试 :) 查看生成的 html 表单可能会有所帮助,查看 request.FILESStdImageField 类是否正确,它可以与标准 ImageField 一起使用吗?在另一个视图中调用另一个视图也是一个坏主意。应该有一个重定向。

标签: django django-forms django-views django-models django-uploads


【解决方案1】:

检查与“images/”连接的 MEDIA_ROOT 设置是否是 Django 进程的有效且可写路径。

也使用 pdb

import pdb; pdb.set_trace()

可以在查找问题的过程中为您提供帮助(例如,查看 request.FILES 以查看在发布期间是否一切正常)。

【讨论】:

    猜你喜欢
    • 2015-04-27
    • 2012-01-24
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 2011-11-06
    • 2012-10-20
    相关资源
    最近更新 更多