diff --git a/taiga/base/utils/db.py b/taiga/base/utils/db.py index f1f2f04b..44e91b67 100644 --- a/taiga/base/utils/db.py +++ b/taiga/base/utils/db.py @@ -27,3 +27,13 @@ def get_typename_for_model_class(model:object, for_concrete_model=True) -> str: model = model._meta.proxy_for_model return "{0}.{1}".format(model._meta.app_label, model._meta.model_name) + + +def reload_attribute(model_instance, attr_name): + """Fetch the stored value of a model instance attribute. + + :param model_instance: Model instance. + :param attr_name: Attribute name to fetch. + """ + qs = type(model_instance).objects.filter(id=model_instance.id) + return qs.values_list(attr_name, flat=True)[0] diff --git a/taiga/projects/occ/mixins.py b/taiga/projects/occ/mixins.py index 95ac8b1c..e7d3fe00 100644 --- a/taiga/projects/occ/mixins.py +++ b/taiga/projects/occ/mixins.py @@ -18,6 +18,7 @@ from django.db import models from django.utils.translation import ugettext_lazy as _ from taiga.base import exceptions as exc +from taiga.base.utils import db class OCCResourceMixin(object): @@ -37,6 +38,11 @@ class OCCResourceMixin(object): super().pre_save(obj) + def post_save(self, obj, created=False): + super().post_save(obj, created) + if not created: + obj.version = db.reload_attribute(obj, 'version') + class OCCModelMixin(models.Model): """