2013-06-21 2 views
3

상속 된 장고 모델의 일부 기본값을 무시하려고합니다. 필요한 모델에 대해 다양한 이미지 크기가 있으며 필요로하는 필드는 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 

답변

4

불행히도 파이썬 클래스가 작동하지 않습니다. 클래스 생성자를 포함하여 클래스 본문의 코드는 클래스가 정의 될 때 평가됩니다. 따라서 하위 클래스가 정의 될 때 필드 생성자가 이미 호출되었으며 해당 값은 잠겨 있습니다.

또한 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의 사전을 반환과 유사한 기능을 만들 것입니다 전화 귀하의 구체적인 사건. 그래도 충분히 시작할 수 있습니다.

관련 문제