diff options
author | Étienne Loks <etienne.loks@proxience.com> | 2015-01-26 12:35:29 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@proxience.com> | 2015-01-26 12:35:29 +0100 |
commit | 87d8129d6259722d2e3b159390f0ab8876b1e1ce (patch) | |
tree | 5a2c1eeb4abbd069023c5122d5dd06a027a6082e /ishtar_common | |
parent | f468cb6bc7bde671b78c076daaf73a92a8f33a69 (diff) | |
download | Ishtar-87d8129d6259722d2e3b159390f0ab8876b1e1ce.tar.bz2 Ishtar-87d8129d6259722d2e3b159390f0ab8876b1e1ce.zip |
GeneralType keys: fix management of changed label
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/models.py | 30 | ||||
-rw-r--r-- | ishtar_common/tests.py | 1 |
2 files changed, 11 insertions, 20 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 75d2ea544..e7e188911 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -35,8 +35,7 @@ from django.core.validators import validate_slug from django.core.urlresolvers import reverse, NoReverseMatch from django.db.utils import DatabaseError from django.db.models import Q, Max, Count -from django.db.models.signals import post_save, pre_save -from django.dispatch import receiver +from django.db.models.signals import post_save from django.utils.translation import ugettext_lazy as _, ugettext from django.utils.safestring import SafeUnicode, mark_safe from django.template.defaultfilters import slugify @@ -354,18 +353,19 @@ class GeneralType(models.Model): self.txt_idx = slugify(self.label) # clean old keys - pre_label = getattr(self, 'pre_label', None) - pre_txt_idx = getattr(self, 'pre_txt_idx', None) - content_type = ContentType.objects.get_for_model(self.__class__) - if pre_label and self.label != pre_label: - ItemKey.objects.filter(object_id=self.pk, key=slugify(pre_label), + if self.pk: + old = self.__class__.objects.get(pk=self.pk) + content_type = ContentType.objects.get_for_model(self.__class__) + if slugify(self.label) != slugify(old.label): + ItemKey.objects.filter(object_id=self.pk, key=slugify(old.label), content_type=content_type).delete() - if pre_txt_idx and self.txt_idx != pre_txt_idx: - ItemKey.objects.filter(object_id=self.pk, key=pre_txt_idx, + if self.txt_idx != old.txt_idx: + ItemKey.objects.filter(object_id=self.pk, key=old.txt_idx, content_type=content_type).delete() + obj = super(GeneralType, self).save(*args, **kwargs) self.generate_key(force=True) - return super(GeneralType, self).save(*args, **kwargs) + return obj def add_key(self, key, force=False): content_type = ContentType.objects.get_for_model(self.__class__) @@ -396,16 +396,6 @@ class GeneralType(models.Model): for item in cls.objects.all(): item.generate_key() -@receiver(pre_save) -def pre_save_general_type(sender, **kwargs): - if not issubclass(sender, GeneralType) or not 'instance' in kwargs \ - or not kwargs['instance']: - return - instance = kwargs['instance'] - instance.pre_label = instance.label - instance.pre_txt_idx = instance.txt_idx - - class ItemKey(models.Model): key = models.CharField(_(u"Key"), max_length=100) content_type = models.ForeignKey(ContentType) diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py index b22d27169..06d0ca3ec 100644 --- a/ishtar_common/tests.py +++ b/ishtar_common/tests.py @@ -123,6 +123,7 @@ class ImportKeyTest(TestCase): # modification label_3 = "Yop" ot_2.label = label_3 + ot_2.txt_idx = slugify(label_3) ot_2.save() # old label not referenced anymore self.assertEqual(models.ItemKey.objects.filter(object_id=ot_2.pk, |