diff options
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r-- | ishtar_common/models.py | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py index c7f89299e..23c2f3ac7 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -40,7 +40,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 +from django.db.models.signals import post_save, pre_delete from django.utils.translation import ugettext_lazy as _, ugettext from django.utils.safestring import SafeUnicode, mark_safe from django.template.defaultfilters import slugify @@ -78,6 +78,12 @@ def post_save_user(sender, **kwargs): pass post_save.connect(post_save_user, sender=User) +class Imported(models.Model): + imports = models.ManyToManyField('Import', blank=True, null=True, + related_name="imported_%(app_label)s_%(class)s") + class Meta: + abstract = True + class ValueGetter(object): _prefix = "" def get_values(self, prefix=''): @@ -473,7 +479,7 @@ class HistoryError(Exception): def __str__(self): return repr(self.value) -class BaseHistorizedItem(models.Model): +class BaseHistorizedItem(Imported): history_modifier = models.ForeignKey(User, related_name='+', on_delete=models.SET_NULL, verbose_name=_(u"Last editor"), blank=True, @@ -1425,6 +1431,32 @@ class Import(models.Model): self.state = 'AC' self.save() + def get_all_imported(self): + print(dir(self._meta)) + imported = [] + for related, zorg in self._meta.get_all_related_m2m_objects_with_model(): + accessor = related.get_accessor_name() + imported += [(accessor, obj) + for obj in getattr(self, accessor).all()] + return imported + +def pre_delete_import(sender, **kwargs): + # deleted imported items when an import is delete + instance = kwargs.get('instance') + if not instance: + return + to_delete = [] + for accessor, imported in instance.get_all_imported(): + # if imported is related to another import do not delete + if getattr(instance, accessor).exclude(pk=imported.pk).count(): + continue + to_delete.append(imported) + for item in to_delete: + item.delete() + + +pre_delete.connect(pre_delete_import, sender=Import) + class Organization(Address, Merge, OwnPerms, ValueGetter): TABLE_COLS = ('name', 'organization_type',) name = models.CharField(_(u"Name"), max_length=300) |