python – Django模型继承覆盖字段属性中使用的变量
作者:互联网
我试图覆盖继承的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
解决方法:
不幸的是,这不是Python类的工作方式.定义类时,将评估类主体中的代码(包括字段构造函数).因此,在定义子类时,已经调用了字段构造函数,并且这些值被锁定.
另外,Django ORM doesn’t support overriding model fields.ImageKit字段不是常规模型字段,但由于Django不支持此功能,因此它不是IK支持的. (我是维护者.)
因此,你要么必须忍受一些重复,要么深入研究元类世界.或者,你可以create a spec class that varies based on the model.
标签:python,django,django-imagekit 来源: https://codeday.me/bug/20190625/1283723.html