2009-04-17 64 views
1

我正在使用Satchmo和Django,並試圖擴展Satchmo的產品模型。我希望在不改變Satchmo的源代碼的情況下,讓Satchmo的產品模型中的某個字段在管理員中擁有默認值。這裏是的Satchmo產品型號的縮寫版本:在Python中覆蓋類成員變量(Django/Satchmo)

class Product(models.Model): 
    site = models.ForeignKey(Site, verbose_name='Site') 

這就是我試圖做延長它...

class MyProduct(Product): 
    Product.site = models.ForeignKey(Site, verbose_name='Site', editable=False, default=1) 

這不起作用,爲什麼任何想法?

回答

1

由於兩個原因,首先您嘗試重寫類變量的方式不僅僅是它在Python中的工作原理。你只需在類中定義它,就像def __init__(self):覆蓋超類初始值設定項一樣。但是,Django模型繼承並不支持這一點。如果你想添加約束,你可以在save()方法中這樣做。

-2

您不能從子類更改超類。

您有來源。使用顛覆。進行更改。當Satchmo更新時,合併您的更改的更新。

1

你也許可以猴補丁,如果你真的想:

site_field = Product._meta.get_field('site') 
site_field.editable = False 
site_field.default = 1 

但這是一個壞習慣,可能會引起問題;可以說不太可維護,而不是直接修補Satchmo的來源。