我如何以编程方式创建一个具有图像字段的模型和字段来捕获Django中的宽度和高度

时间:2011-09-02 15:41:07

标签: django django-models

我有一个看起来像这样的照片模型

class Photo(models.Model):
    title = models.CharField(max_length=100, blank=True)
    width = models.IntegerField()
    height = models.IntegerField()
    image = models.ImageField(upload_to=upload_to_callable, width_field="width", height_field="height")
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey()
    create_date = models.DateTimeField(auto_now_add=True)
    modified_date = models.DateTimeField(auto_now=True)
    site = models.ForeignKey(Site)

在我的一个测试中,我需要以编程方式创建此模型。这就是我正在做的事情

def _create_random_image(self):
        import Image,ImageDraw

        img = Image.new("RGB", (300,300), "#FFFFFF")
        draw = ImageDraw.Draw(img)

        r,g,b = rint (0,255), rint(0,255), rint(0,255)
        dr = (rint(0,255) - r)/300.
        dg = (rint(0,255) - g)/300.
        db = (rint(0,255) - b)/300.
        for i in range(300):
            r,g,b = r+dr, g+dg, b+db
            draw.line((i,0,i,300), fill=(int(r),int(g),int(b)))

        tmpfilename = "/tmp/test36052.png"
        img.save(tmpfilename, "PNG")
        f = file(tmpfilename)
        return f

def testHomePageImage(self):
   tmpfile = self._create_random_image()
   photo = Photo.objects.create(image=tmpfile, 
                                 title=site1_home_page.title, 
                                 site=self.site1, 
                                 content_object = site1_home_page)

我收到以下错误

AttributeError:'file'对象没有属性'width'

是否有一个内部django对象扩展了我可以使用的文件对象?

1 个答案:

答案 0 :(得分:1)

尝试直接返回ImageFile(f)而不是fImageFile位于django.core.files.images.ImageFile。在我的头顶,我认为这样做。

编辑:纠正错误,所以它是正确的。