编程语言
首页 > 编程语言> > python – Django模型继承覆盖字段属性中使用的变量

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