Using custom save methods really is the best way to achieve this.
You could also use signals but this tends to be harder to maintain.

One way to make this "cleaner" could be to create mixins your model class can inherit from.
You could also define kwargs which turn of that behaviour if you worry for that. Depending on your requirements your rest api could be a place to handle that but most of the times i would go with something like you already did.