我试图覆盖继承的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
答案 0 :(得分:4)
不幸的是,这不是Python类的工作方式。定义类时,将评估类主体中的代码(包括字段构造函数)。因此,在定义子类时,已经调用了字段构造函数,并且这些值被锁定。
另外,Django ORM doesn't support overriding model fields。 ImageKit字段不是常规模型字段,但由于Django无论如何都不支持此功能,因此它不是IK支持的。 (我是维护者。)
因此,你要么必须忍受一些重复,要么深入研究元类世界。或者,您可以create a spec class that varies based on the model。
答案 1 :(得分:0)
尝试将此添加到您的基类(ImageLink)
@classmethod
def showDefaultValue(cls)
print 'default value = %s' % (cls.default)
然后拨打PosterLink.showDefaultValue()
我会创建一个类似于此的函数,它返回一个包含特定情况的所有默认参数的字典。这应该给你足够的开始。