在Python中覆盖类成员变量(Django / Satchmo)

时间:2009-04-17 20:54:10

标签: python django satchmo

我正在使用Satchmo和Django,我正在尝试扩展Satchmo的产品模型。我想让Satchmo产品模型中的一个字段在管理员中具有默认值而不更改Satchmo的源代码。以下是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)

这不行,有什么想法吗?

3 个答案:

答案 0 :(得分:1)

出于两个原因,首先,你试图覆盖类变量的方式不是它在Python中的工作方式。您只需在类中正常定义它,就像def __init__(self):覆盖超类初始化程序一样。但是,Django模型继承根本不支持这一点。如果要添加约束,可以在save()方法中执行此操作。

答案 1 :(得分:1)

如果你真的想:

,你可能可以将其打包
site_field = Product._meta.get_field('site')
site_field.editable = False
site_field.default = 1

但这是一种讨厌的习惯,可能会引发问题;可以说比直接修补Satchmo的源更难维护。

答案 2 :(得分:-2)

您无法从子类更改超类。

你有来源。使用subversion。做出改变。更新Satchmo时,请根据您的更改合并更新。