diff options
Diffstat (limited to 'ishtar_common/models.py')
| -rw-r--r-- | ishtar_common/models.py | 42 | 
1 files changed, 27 insertions, 15 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py index a4fe5af7f..53d5c85ac 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -717,33 +717,43 @@ class GeneralType(Cached, models.Model):          self.generate_key(force=True)          return obj -    def add_key(self, key, force=False, importer=None): +    def add_key(self, key, force=False, importer=None, group=None, +                user=None):          content_type = ContentType.objects.get_for_model(self.__class__)          if not importer and not force and ItemKey.objects.filter(                  key=key, content_type=content_type).count():              return +        filtr = {'key': key, 'content_type': content_type} +        if group: +            filtr['group'] = group +        elif user: +            filtr['user'] = user +        else: +            filtr['importer'] = importer          if force: -            ItemKey.objects.filter(key=key, content_type=content_type, -                                   importer=importer)\ -                           .exclude(object_id=self.pk).delete() -        ItemKey.objects.get_or_create( -            object_id=self.pk, key=key, content_type=content_type, -            importer=importer -        ) +            ItemKey.objects.filter(**filtr).exclude(object_id=self.pk).delete() +        filtr['object_id'] = self.pk +        ItemKey.objects.get_or_create(**filtr)      def generate_key(self, force=False):          for key in (slugify(self.label), self.txt_idx):              self.add_key(key) -    def get_keys(self, importer_id=None): +    def get_keys(self, importer):          keys = [self.txt_idx]          content_type = ContentType.objects.get_for_model(self.__class__) -        query = Q(content_type=content_type, object_id=self.pk, -                  importer__isnull=True) -        if importer_id: -            query |= Q(content_type=content_type, object_id=self.pk, -                       importer__pk=importer_id) -        q = ItemKey.objects.filter(query) +        base_q = Q(content_type=content_type, object_id=self.pk) +        subquery = Q(importer__isnull=True, user__isnull=True, +                     group__isnull=True) +        subquery |= Q(user__isnull=True, group__isnull=True, +                      importer=importer) +        if importer.user: +            subquery |= Q(user=importer.user, group__isnull=True, +                          importer=importer) +        if importer.associated_group: +            subquery |= Q(user__isnull=True, group=importer.associated_group, +                          importer=importer) +        q = ItemKey.objects.filter(base_q & subquery)          for ik in q.exclude(key=self.txt_idx).all():              keys.append(ik.key)          return keys @@ -763,6 +773,8 @@ class ItemKey(models.Model):      importer = models.ForeignKey(          Import, null=True, blank=True,          help_text=_(u"Specific key to an import")) +    user = models.ForeignKey('IshtarUser', blank=True, null=True) +    group = models.ForeignKey(TargetKeyGroup, blank=True, null=True)      def __unicode__(self):          return self.key  | 
