'Handles the parts of saving which should be done only once per save,
yet need to be done in raw saves, too. This includes some sanity
checks and signal sending.
The \'raw\' argument is telling save_base not to save any parent
models and not to do any changes to the values before save. This
is used by fixture loading.'

def save_base(self, raw=False, force_insert=False, force_update=False, using=None, update_fields=None):

    using = (using or router.db_for_write(self.__class__, instance=self))
    assert (not (force_insert and (force_update or update_fields)))
    assert ((update_fields is None) or (len(update_fields) > 0))
    cls = origin = self.__class__
    if cls._meta.proxy:
        cls = cls._meta.concrete_model
    meta = cls._meta
    if (not meta.auto_created):
        signals.pre_save.send(sender=origin, instance=self, raw=raw, using=using, update_fields=update_fields)
    with transaction.commit_on_success_unless_managed(using=using, savepoint=False):
        if (not raw):
            self._save_parents(cls, using, update_fields)
        updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
    self._state.db = using
    self._state.adding = False
    if (not meta.auto_created):
        signals.post_save.send(sender=origin, instance=self, created=(not updated), update_fields=update_fields, raw=raw, using=using)
