Django Model: How to use mixin class to override d

2020-07-18 06:29发布

问题:

I want to validate value before every model save. So, I must override the save function. The code is nearly just the same on, and I want to write it in a mixin class. But failed for I don't know how to write super func.

I'm poor of of English, so sorry.

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

回答1:

You always refer to the current class in a super call.

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

This is true for mixins as well as normal subclassing.

(Also, don't catch a base Exception, and especially don't catch things only to raise another Exception - that makes no sense at all.)