diff options
Diffstat (limited to 'ishtar_common')
| -rw-r--r-- | ishtar_common/models.py | 22 | ||||
| -rw-r--r-- | ishtar_common/views_item.py | 14 | 
2 files changed, 32 insertions, 4 deletions
| diff --git a/ishtar_common/models.py b/ishtar_common/models.py index a1bae96c2..82c754fa0 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -3408,7 +3408,7 @@ class IshtarUser(FullSearch):          return self.person.full_label() -class Basket(models.Model): +class Basket(FullSearch):      """      Abstract class for a basket      Subclass must be defined with an "items" ManyToManyField @@ -3416,8 +3416,19 @@ class Basket(models.Model):      IS_BASKET = True      label = models.CharField(_(u"Label"), max_length=1000)      comment = models.TextField(_(u"Comment"), blank=True, null=True) -    user = models.ForeignKey(IshtarUser, blank=True, null=True) +    user = models.ForeignKey( +        IshtarUser, blank=True, null=True, related_name='%(class)ss', +        verbose_name=_(u"Owner"))      available = models.BooleanField(_(u"Available"), default=True) +    shared_with = models.ManyToManyField( +        IshtarUser, verbose_name=_(u"Shared with"), blank=True, +        related_name='shared_%(class)ss' +    ) + +    TABLE_COLS = ['label', 'user'] + +    BASE_SEARCH_VECTORS = ['label', 'comment'] +    M2M_SEARCH_VECTORS = ['items']      class Meta:          abstract = True @@ -3426,6 +3437,13 @@ class Basket(models.Model):      def __unicode__(self):          return self.label +    @classmethod +    def BASE_REQUEST(cls, request): +        if not request.user or not getattr(request.user, 'ishtaruser', None): +            return Q(pk=None) +        ishtaruser = request.user.ishtaruser +        return Q(user=ishtaruser) | Q(shared_with=ishtaruser) +      @property      def cached_label(self):          return unicode(self) diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index 5cd3eb826..7c6cbc24a 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -902,7 +902,10 @@ def get_item(model, func_name, default_name, extra_request_keys=[],          else:              my_extra_request_keys = copy(extra_request_keys)          if base_request is None and hasattr(model, 'BASE_REQUEST'): -            my_base_request = copy(model.BASE_REQUEST) +            if callable(model.BASE_REQUEST): +                my_base_request = model.BASE_REQUEST(request) +            else: +                my_base_request = copy(model.BASE_REQUEST)          elif base_request is not None:              my_base_request = copy(base_request)          else: @@ -987,7 +990,12 @@ def get_item(model, func_name, default_name, extra_request_keys=[],          request_items = dct_request_items -        dct = my_base_request +        base_query = None +        if isinstance(my_base_request, Q): +            base_query = my_base_request +            dct = {} +        else: +            dct = my_base_request          excluded_dct = {}          and_reqs, or_reqs = [], []          exc_and_reqs, exc_or_reqs = [], [] @@ -1099,6 +1107,8 @@ def get_item(model, func_name, default_name, extra_request_keys=[],          # print(query)          items = model.objects.filter(query) +        if base_query: +            items = items.filter(base_query)          if exc_query:              items = items.exclude(exc_query) | 
