【问题标题】:Error on uploading image in django: "coercing to Unicode: need string or buffer, tuple found"在 django 中上传图像时出错:“强制转换为 Unicode:需要字符串或缓冲区,找到元组”
【发布时间】:2025-11-27 18:10:01
【问题描述】:

尝试在 django 中使用 ImageField。 这是我的模型

class Album(models.Model):
    title = models.CharField(max_length=100)

    def __unicode__(self):
        return self.title

class Photo(models.Model):
    image = models.ImageField(upload_to='photos/')
    album = models.ForeignKey(Album)
    title = models.CharField(max_length=100, default="")

    def __unicode__(self):
        return self.title

class PhotoModelForm(forms.ModelForm):
    class Meta:
        model = Photo

这是 urls.py

的一部分
...
url(r'^trial/upload/$', 'trial.views.upload'),
...

views.py

def upload(request):
    if request.method == 'POST':
        form = PhotoModelForm(request.POST, request.FILES)
        if form.is_valid():
            photo = form.save()
            return render_to_response('trial/thanks_upload.html',{
                'photo': photo
            }, context_instance = RequestContext(request))
    else:
        form = PhotoModelForm()
    return render_to_response('trial/upload.html', {
      'form': form
    }, context_instance = RequestContext(request))

上传.html

<form enctype="multipart/form-data" action="/trial/upload/" method="post">
    {% csrf_token %}
    {% for field in form %}
        <div class="fieldWrapper">
            {{ field.errors }}
            {{ field.label_tag }}: {{ field }}
        </div>
    {% endfor %}
    <p><input type="submit" value="Upload" /></p>
</form>

但是在保存时我有下一个错误: /trial/upload/ 处的类型错误 强制转换为 Unicode:需要字符串或缓冲区,找到元组

photo.save

上出现错误

有人知道为什么会这样吗?为什么会出现 tuple?我确定有一个愚蠢的错误......

【问题讨论】:

  • 你能说出错误发生在哪一行吗?
  • views.pyphoto = form.save() 去哪里
  • 看起来您在某处输入了额外的逗号。
  • 它可能在哪里?我已经在上面列出了源代码。
  • @DrTyrsa,你是对的!它在我的 setting.py 文件中

标签: django image-uploading modelform imagefield


【解决方案1】:

我自己搞定了。在 settings.py 中有 MEDIA_ROOT 设置,这是

MEDIA_ROOT = 'd:/dev/python/scripts/app/media/',

Python 由于末尾的逗号而使对象元组。这就是它无法保存对象的原因。下次注意逗号!

【讨论】:

  • 令人惊讶的是,其他人遇到了同样的问题并在互联网上发布
最近更新 更多