4

我正在尝试覆盖继承的 Django 模型中的一些默认值。对于我需要的模型,我有一堆不同的图像大小,所需的字段是 90% 相同的。

我已经尝试创建一个要使用的基本模型,并将向子模型添加所需的任何其他字段。

我遇到的问题是图像仅使用我设置的“默认”值并且没有在子模型中被覆盖。我想要完成的事情可能吗?

谢谢!

class ImageLink(models.Model):

    #Default Image Sizes
    SIZED_WIDTH =  500
    SIZED_HEIGHT = 400

    THUMB_WIDTH = 50
    THUMB_HEIGHT = 50


    #Name of the link
    name = models.CharField(max_length = 15)

    #Images used for link
    image_original = models.ImageField(upload_to="imageLink/images/%Y/%m/%d")

    image_sized = ImageSpecField(   source='image_original',
                                processors=[ResizeToFill(SIZED_WIDTH, SIZED_HEIGHT)],
                                format='JPEG',
                                options={'quality' : 60 })

    image_thumb = ImageSpecField(   source='image_original',
                                processors=[ResizeToFill(THUMB_WIDTH, THUMB_HEIGHT)],
                                format='JPEG',
                                options={'quality' : 60 })
    class Meta:
        abstract = True

# Model for all poster links
class PosterLink(ImageLink):

    #Image sizes
    SIZED_WIDTH =  200
    SIZED_HEIGHT = 263

    THUMB_WIDTH = 50
    THUMB_HEIGHT = 66
4

2 回答 2

4

不幸的是,这不是 Python 类的工作方式。定义类时评估类主体中的代码(包括字段构造函数)。所以在定义子类时,字段构造函数已经被调用并且这些值被锁定。

此外,Django ORM不支持覆盖模型字段。ImageKit 字段不是常规模型字段,但由于 Django 不支持此功能,因此 IK 不支持。(我是维护者。)

所以你要么不得不忍受一些重复,要么深入研究元类的世界。或者,您可以创建一个根据模型而变化的规格类

于 2013-06-21T22:31:21.560 回答
0

尝试将此添加到您的基类(ImageLink)

@classmethod
def showDefaultValue(cls)
print 'default value = %s' % (cls.default)

然后打电话PosterLink.showDefaultValue()

我会创建一个与此类似的函数,该函数会为您的特定情况返回所有默认参数的字典。这应该给你足够的开始。

于 2013-06-21T16:33:29.667 回答