python - Django 模型继承覆盖字段属性中使用的变量

标签 python django django-imagekit

我正在尝试覆盖继承的 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 模型继承覆盖字段属性中使用的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17239684/

相关文章:

python - 将所有目录中的图像复制到另一个目录中

python - 修改 python 脚本以在目录中的每个文件上运行

python - Geopy ValueError "Didn' t 在地理编码时完全找到一个匹配项

python - ImageSpecField 原始图像的 Django-ImageKit 问题

python - Django Imagekit 覆盖cachefile_name?

python - Django 表单字段标签翻译

python - 在不同光量下检测颜色 Blob 中心的可靠方法?

django - 是否可以在不修改 Form 类的情况下使用 django-crispy-form FormHelper

python - Django 测试, 'SQLCompiler' 对象没有属性 'col_count'

django-imagekit - 显示默认图像的更好方式?