2013-06-21 63 views
3

我想覆蓋繼承的Django模型中的一些默認值。對於我需要的模型,我有一堆不同的圖像尺寸,並且所需的字段是90%。Django模型繼承覆蓋字段屬性中使用的變量

我已經嘗試創建一個基本模型來使用,並將要添加任何額外的字段需要的兒童模型。

我遇到的問題是圖像僅使用我設置的「默認」值,並且未在子模型中被覆蓋。我正試圖完成什麼?

謝謝!

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 

回答

4

不幸的是,這不是Python類的工作方式。當類定義時,將評估類體中的代碼(包括字段構造函數)。因此,在定義子類的時候,字段構造函數已經被調用並且這些值被鎖定。

另外,Django ORM doesn't support overriding model fields。 ImageKit字段不是常規模型字段,但由於Django不支持此功能,它不是IK支持的。 (我是一個維護者)。

所以你要麼必須忍受一些重複或深入元類世界。或者,您可以create a spec class that varies based on the model

+0

好的,謝謝你的解釋 – mikes000

+0

Np。樂意效勞! – matthewwithanm

0

嘗試添加這對你的基類(ImageLink的)

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

,然後調用PosterLink.showDefaultValue()

我想創建一個類似的函數返回的所有默認PARAMS的字典你的具體案例。這應該給你足夠的啓動。