diff options
| author | Étienne Loks <etienne.loks@proxience.com> | 2015-05-06 15:29:19 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@proxience.com> | 2015-05-06 15:29:19 +0200 | 
| commit | 35b163e7626a0f556ad32b303c1b9fa94cdf1d3e (patch) | |
| tree | d24f8ac1696113693411e8b9adc32b428e120e41 /ishtar_common/models.py | |
| parent | 8491b7c2cd6613394bed5ca95db77225e159d99e (diff) | |
| download | Ishtar-35b163e7626a0f556ad32b303c1b9fa94cdf1d3e.tar.bz2 Ishtar-35b163e7626a0f556ad32b303c1b9fa94cdf1d3e.zip | |
Manage link between import and imported object - Auto-delete imported object when deleting import
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) | 
