1

私は Satchmo と Django を使用しており、Satchmo の製品モデルを拡張しようとしています。Satchmo のソース コードを変更せずに、Satchmo の Product モデルのフィールドの 1 つを管理画面でデフォルト値に設定したいと考えています。以下は、Satchmo の Product モデルの短縮版です。

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

2 つの理由から、まずクラス変数をオーバーライドしようとしている方法は、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

スーパークラスをサブクラスから変更することはできません。

ソースがあります。Subversionを使用します。変更を加えます。Satchmoが更新されたら、変更に関する更新をマージします。

于 2009-04-17T23:43:16.780 に答える