2

尝试在 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'),
...

视图.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>

但是在保存时我有下一个错误: TypeError at /trial/upload/ coercing to Unicode: need string or buffer, tuple found

photo.save上出现错误

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

4

1 回答 1

9

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

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

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

于 2011-06-03T04:46:59.250 回答