summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/models.py22
-rw-r--r--ishtar_common/views_item.py14
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)