4

すべてのモデルを保存する前に値を検証したい。そのため、保存機能をオーバーライドする必要があります。コードはほぼ同じで、mixin クラスに記述したいと考えています。しかし、スーパー関数の書き方がわからないので失敗しました。

私は英語が苦手です。申し訳ありません。

class SyncableMixin(object):
  def save(self, *args, **kwargs):
    try:
      res = validate(*args, **kwargs)
    except Exception:
      raise ValidateException()

    super(?, self).save(*args, **kwargs)

class SomeModel(SyncableMixin, models.Model):
  pass
4

1 に答える 1

7

スーパー コールでは常に現在のクラスを参照します。

super(SyncableMixin, self).save(*args, **kwargs)

これは、通常のサブクラス化だけでなく、ミックスインにも当てはまります。

(また、基本的な例外をキャッチしないでください。特に、別の例外を発生させるためだけに物事をキャッチしないでください。まったく意味がありません。)

于 2012-10-03T09:09:48.843 に答える