2010-05-04 56 views
4

我有一個類屬性和幾個子類的主類。我想爲每個子類設置默認類別。例如:模型的繼承和屬性默認值

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

你有一個簡單的例子? – 2010-05-04 18:02:44

+0

當然,這應該是'kwargs.setdefault('category',2)' – 2010-05-04 18:59:51

0

我想通這一個:

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

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

不知道它的最好的方法,但它的功能

+0

我只是想說明爲什麼我把Ignacio的解決方案放在我的頭上。他的方法很容易在沒有ModelAdmin干預的情況下處理財產。處理通過Django管理界面輸入的數據非常理想。 – 2010-05-06 14:13:53