【问题标题】:Django model inheritance overriding a variable used in field attributeDjango模型继承覆盖字段属性中使用的变量
【发布时间】:2013-06-21 16:07:16
【问题描述】:

我正在尝试覆盖继承的 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 django-imagekit


    【解决方案1】:

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

    此外,Django ORM doesn't support overriding model fields。 ImageKit 字段不是常规模型字段,但由于 Django 不支持此功能,因此 IK 不支持。 (我是维护者。)

    因此,您要么不得不忍受一些重复,要么深入研究元类的世界。或者,您可以create a spec class that varies based on the model

    【讨论】:

      【解决方案2】:

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

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

      然后拨打PosterLink.showDefaultValue()

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-22
        • 2017-04-21
        • 2012-07-11
        相关资源
        最近更新 更多