django imagekit处理器:使用存储在数据库中的维度

dem*_*mux 3 python django imagekit django-imagekit

我有一个模型,其中缩略图宽度在父对象(ForeignKey)之间变化.我需要能够将此信息提供给imagekit处理器.这就是我所拥有的:

class Wall(models.Model):
    #...
    width = models.SmallIntegerField(null=True, blank=True)
    #...


class Poster(models.Model):
    wall = models.ForeignKey(Wall, related_name='posters')
    #...
    original_image = models.ImageField(upload_to=upload_image_to)

    def __init__(self, *args, **kwargs):
        self.thumbnail = ImageSpecField([
                Adjust(contrast=1.2, sharpness=1.1),
                SmartResize(height=163, width=self.wall.width)
            ],
            image_field='original_image', format='PNG'
        )

        super(Poster, self).__init__(*args, **kwargs)
    #...
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做,没有任何反应,甚至没有生成缩略图网址.

以下将导致此异常:
AttributeError:'ForeignKey'对象没有属性'width'

class Poster(models.Model):
    wall = models.ForeignKey(Wall, related_name='posters')
    #...
    original_image = models.ImageField(upload_to=upload_image_to)

    thumbnail = ImageSpecField([
            Adjust(contrast=1.2, sharpness=1.1),
            SmartResize(height=163, width=wall.width)
        ],
        image_field='original_image', format='PNG'
    )
    #...
Run Code Online (Sandbox Code Playgroud)

小智 6

#1答案不适合当前版本的django-imagekit(3.0.3).我找到了正式的解决方案.请参考 http://django-imagekit.readthedocs.org/en/latest/advanced_usage.html#specs-that-c​​hange