0

我正在尝试从 url 读取图像并保存到数据库中。

image = Image()
name = urlparse(imgurl).path.split('/')[-1]
image.bild.save(name, File(urllib2.urlopen(imgurl).read()), save=False)#error line
image.von_location = location
image.save()

这是我的图像模型

class Image(models.Model):
   von_location= models.ForeignKey(Location,related_name="locations_image",default=0)
   bild = models.ImageField(upload_to=locationimage,default='')
   def __unicode__(self):
       return self.bild.name

当我尝试调用save()图像文件的方法时出现以下错误。

AttributeError: str has no attribute name

name只是我在这里读到的图像名称https://docs.djangoproject.com/en/dev/ref/files/file/

这是错误信息的截图

在此处输入图像描述

4

1 回答 1

3

我能够使用下面的测试应用程序在 Django 1.4 上重现错误。基本上,您需要使用 aContentFile而不是 a,File因为您正在阅读图像的内容。如果您尝试将文件对象直接传递给File,您将遇到未知大小错误。

https://docs.djangoproject.com/en/1.4/ref/models/fields/#django.db.models.FieldFile.save

基本测试应用程序:

模型.py

class TestModel(models.Model):
    file = models.FileField(upload_to="test")

    def __unicode__(self):
        return self.file.name

测试.py

import os.path
import urllib2
from urlparse import urlparse

from django.test import TestCase
from django.core.files import File
from django.core.files.base import ContentFile

from testapp.models import TestModel

class SimpleTest(TestCase):
    def test_models(self):
        test_model = TestModel()
        imgurl = 'http://www.stackoverflow.com/favicon.ico'
        name = urlparse(imgurl).path.split('/')[-1]
        content =  urllib2.urlopen(imgurl).read()
        #test_model.file.save(name, File(content), save=False) # error line
        test_model.file.save(name, ContentFile(content), save=False)
        test_model.save()
        print test_model
于 2013-10-14T21:59:30.730 回答