'Shortcut for doing an UPDATE on this object.
By default it uses django\'s .save(update_fields=[]) feature, but if you
pass _signal=False, it uses <manager>.update(**kwargs) instead in order
to avoid sending pre_save and post_save signals.
Gotchas:
- Like django regular .save() method, it does not work if the default
manager queryset hides some rows (often the case on models where soft
deletion is implemented). You need to unhide the instance from the
default manager before using this method.
- When using _signal=False, updating translated fields won\'t work,
since translated fields require pre_save signal to work.'

def update(self, **kwargs):

    signal = kwargs.pop('_signal', True)
    for (key, value) in kwargs.items():
        setattr(self, key, value)
    if signal:
        return self.save(update_fields=kwargs.keys())
    else:
        cls = self.__class__
        cls.objects.filter(pk=self.pk).update(**kwargs)
