hmm what about a new approach that puts these methods on the manager instead, then you do something like...

```python
class StateLogManager(Manager):
    def _get_cache_key_for_object(obj):
        ...

    def create_pending(**kwargs):
        log = self.model(**kwargs)
        key = self._get_cache_key_for_object(kwargs['content_object'])
        cache.set(key, log)
        return log

    def commit_pending_for_object(obj):
        key = self._get_cache_key_for_object(obj)
        log = self.get_pending_for_object(obj)
        log.save()
        cache.delete(key)
        return log

    def get_pending_for_object(obj):
        key = self._get_cache_key_for_object(obj)
        return cache.get(key)


# Usage
log = StateLog.objects.create_pending(
    by=getattr(instance, 'by', None),
    state=target,
    transition=name,
    content_object=instance,
)

...

article = Article.objects.get(...)
log = StateLog.objects.get_pending_for_object(article)

...

article = Article.objects.get(...)
log = self.commit_pending_for_object(article)
```