summaryrefslogtreecommitdiff
path: root/archaeological_finds
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2020-11-06 12:05:11 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2020-11-06 12:06:43 +0100
commitafa3761a57ac3d2fe2cabe50a4956a188119bddf (patch)
tree02f9abfc37c78c31ed53185d10ac28e24f551918 /archaeological_finds
parent72b0e6ca45a7296f6288bf994ff3da86c85bad32 (diff)
downloadIshtar-afa3761a57ac3d2fe2cabe50a4956a188119bddf.tar.bz2
Ishtar-afa3761a57ac3d2fe2cabe50a4956a188119bddf.zip
Label generation: optimize template evaluation
Diffstat (limited to 'archaeological_finds')
-rw-r--r--archaeological_finds/models_finds.py46
-rw-r--r--archaeological_finds/models_treatments.py41
2 files changed, 50 insertions, 37 deletions
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py
index 0a32bba69..0260200e9 100644
--- a/archaeological_finds/models_finds.py
+++ b/archaeological_finds/models_finds.py
@@ -357,15 +357,18 @@ class BaseFind(BulkUpdatedItem, BaseHistorizedItem, GeoItem, OwnPerms,
})
return dct
- def get_values(self, prefix='', no_values=False, no_find=False):
- values = super(BaseFind, self).get_values(prefix=prefix,
- no_values=no_values)
+ def get_values(self, prefix='', no_values=False, filtr=None, **kwargs):
+ no_find = kwargs.get("no_find", False)
+ values = super(BaseFind, self).get_values(
+ prefix=prefix, no_values=no_values, filtr=filtr, **kwargs)
if no_find:
return values
- values[prefix + "finds"] = [
- find.get_values(no_values=True, no_base_finds=True)
- for find in self.find.order_by('pk').all()
- ]
+ if not filtr or prefix + "finds" in filtr:
+ kwargs["no_base_finds"] = True
+ values[prefix + "finds"] = [
+ find.get_values(no_values=True, filtr=None, **kwargs)
+ for find in self.find.order_by('pk').all()
+ ]
return values
def get_last_find(self):
@@ -665,13 +668,14 @@ class FindBasket(Basket, MainItem, ValueGetter):
("view_own_find", u"Can view own Find"),
)
- def get_values(self, prefix='', no_values=False):
- values = super(FindBasket, self).get_values(prefix=prefix,
- no_values=no_values)
- values[prefix + "items"] = [
- item.get_values(no_values=True)
- for item in self.items.distinct().all()
- ]
+ def get_values(self, prefix='', no_values=False, filtr=None, **kwargs):
+ values = super(FindBasket, self).get_values(
+ prefix=prefix, no_values=no_values, filtr=filtr, **kwargs)
+ if not filtr or prefix + "items" in filtr:
+ values[prefix + "items"] = [
+ item.get_values(no_values=True, filtr=None, **kwargs)
+ for item in self.items.distinct().all()
+ ]
return values
def get_extra_actions(self, request):
@@ -1761,13 +1765,17 @@ class Find(BulkUpdatedItem, ValueGetter, DocumentItem, BaseHistorizedItem,
return
return self.base_finds.order_by('-pk').all()[0]
- def get_values(self, prefix='', no_values=False, no_base_finds=False):
- values = super(Find, self).get_values(prefix=prefix,
- no_values=no_values)
- if no_base_finds:
+ def get_values(self, prefix='', no_values=False, filtr=None, **kwargs):
+ no_base_finds = False
+ if "no_base_finds" in kwargs:
+ no_base_finds = kwargs["no_base_finds"]
+ values = super(Find, self).get_values(
+ prefix=prefix, no_values=no_values, filtr=filtr, **kwargs)
+ if no_base_finds or (filtr and prefix + "base_finds" not in filtr):
return values
+ kwargs["no_find"] = True
values[prefix + "base_finds"] = [
- base_find.get_values(no_values=True, no_find=True)
+ base_find.get_values(no_values=True, filtr=None, **kwargs)
for base_find in self.base_finds.distinct().order_by('-pk').all()
]
return values
diff --git a/archaeological_finds/models_treatments.py b/archaeological_finds/models_treatments.py
index 071d80af1..a7af1117e 100644
--- a/archaeological_finds/models_treatments.py
+++ b/archaeological_finds/models_treatments.py
@@ -318,8 +318,8 @@ class Treatment(DashboardFormItem, ValueGetter, DocumentItem,
Upstream finds label
:return: string
"""
- return u" ; ".join([f.cached_label for f in self.upstream.all()])
- upstream_lbl.short_description = _(u"Upstream finds")
+ return " ; ".join([f.cached_label for f in self.upstream.all()])
+ upstream_lbl.short_description = _("Upstream finds")
upstream_lbl.admin_order_field = 'upstream__cached_label'
def get_extra_actions(self, request):
@@ -328,26 +328,31 @@ class Treatment(DashboardFormItem, ValueGetter, DocumentItem,
if self.can_do(request, 'add_administrativeact'):
actions += [
(reverse('treatment-add-adminact', args=[self.pk]),
- _(u"Add associated administrative act"), "fa fa-plus",
- _(u"admin. act"), "", False),
+ _("Add associated administrative act"), "fa fa-plus",
+ _("admin. act"), "", False),
]
return actions
- def get_values(self, prefix='', no_values=False):
- values = super(Treatment, self).get_values(prefix=prefix,
- no_values=no_values)
- values[prefix + "upstream_finds"] = u" ; ".join(
- [str(up) for up in self.upstream.all()])
- values[prefix + "downstream_finds"] = u" ; ".join(
- [str(down) for down in self.downstream.all()])
- values[prefix + "operations"] = u" ; ".join(
- [str(ope) for ope in self.get_query_operations().all()])
- if self.upstream.count():
+ def get_values(self, prefix='', no_values=False, filtr=None, **kwargs):
+ values = super(Treatment, self).get_values(
+ prefix=prefix, no_values=no_values, filtr=filtr, **kwargs)
+ if not filtr or prefix + "upstream_finds" in filtr:
+ values[prefix + "upstream_finds"] = " ; ".join(
+ [str(up) for up in self.upstream.all()])
+ if not filtr or prefix + "downstream_finds" in filtr:
+ values[prefix + "downstream_finds"] = " ; ".join(
+ [str(up) for up in self.downstream.all()])
+
+ if not filtr or prefix + "operations" in filtr:
+ values[prefix + "operations"] = " ; ".join(
+ [str(ope) for ope in self.get_query_operations().all()])
+ if 'associatedfind_' not in prefix and self.upstream.count():
find = self.upstream.all()[0]
- if 'associatedfind_' not in prefix:
- values.update(
- find.get_values(prefix=prefix + 'associatedfind_',
- no_values=True))
+ new_prefix = prefix + 'associatedfind_'
+ new_filtr = self._get_values_update_sub_filter(filtr, new_prefix)
+ values.update(
+ find.get_values(prefix=new_prefix, no_values=True,
+ filtr=new_filtr, **kwargs))
return values
def pre_save(self):