2009-04-17 63 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的来源。