2010-05-04 11 views
4

나는 category 속성과 여러 하위 클래스가있는 기본 클래스를 사용합니다. 각 하위 클래스의 기본 범주를 설정하고 싶습니다. 예 :모델 상속 및 속성 기본값

class BaseAd(models.Model): 
    CATEGORY_CHOICES = ((1, 'Zeta'), (2, 'Sigma'), (3, 'Omega'),) 
    category = models.IntegerField(choices=CATEGORY_CHOICES) 
    ... 

class SigmaAd(BaseAd): 
    additional_prop = models.URLField() 
    category = models.IntegerField(default=2, editable=False) 

물론 내 예제는 FieldError 때문에 작동하지 않습니다. 어떻게 재산 가치를 "무시"할 것인가? 아니면 내가 집중해야하는 관리자의 기능입니까?

답변

5

자녀의 __init__() 메서드에서 재정의해야합니다. 전달 된 키워드 인수를 검사하여 category에 값이 주어 졌는지 확인하고, 그렇지 않으면 2으로 설정 한 후 부모에게 전달하십시오.

+0

당신이 간단한 예제를 가지고 있습니까 기능? –

+0

반드시'kwargs.setdefault ('category', 2)가되어야합니다. –

0

내가이 일을 알아 낸 :

class SigmaAdMan(admin.ModelAdmin): 
exclude = ('category',) 

def save_model(self, request, obj, form, change): 
    obj.category = 2 
    obj.save() 

확실하지 경우 그 가장 좋은 방법,하지만

+0

저는 Ignacio의 솔루션을 광산에서 가져간 이유를 알기를 원했습니다. 그의 접근 방식은 ModelAdmin의 개입없이 부동산을 쉽게 다룰 수있었습니다. Django 관리자 인터페이스를 통해 입력되지 않은 데이터를 처리 할 때 이상적이었습니다. –