1

我正在使用 Satchmo 和 Django,并试图扩展 Satchmo 的产品模型。我想让 Satchmo 的 Product 模型中的字段之一在管理员中具有默认值,而无需更改 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)

这不起作用,关于为什么的任何想法?

4

3 回答 3

1

有两个原因,首先,您尝试覆盖类变量的方式不是它在 Python 中的工作方式。您只需在类中正常定义它,与def __init__(self):覆盖超类初始值设定项的方式相同。但是,Django 模型继承根本不支持这一点。如果要添加约束,可以在 save() 方法中进行。

于 2009-04-17T21:55:30.830 回答
1

如果你真的想的话,你可能会对其进行猴子补丁:

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

但这是一个讨厌的习惯,可能会导致问题;可以说比直接修补 Satchmo 的源代码更难维护。

于 2009-04-20T15:52:20.053 回答
-2

您不能从子类更改超类。

你有来源。使用颠覆。做出改变。当 Satchmo 更新时,合并围绕您的更改的更新。

于 2009-04-17T23:43:16.780 回答