summaryrefslogtreecommitdiff
path: root/archaeological_finds/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_finds/models.py')
-rw-r--r--archaeological_finds/models.py31
1 files changed, 27 insertions, 4 deletions
diff --git a/archaeological_finds/models.py b/archaeological_finds/models.py
index 15ed32120..5811ded6e 100644
--- a/archaeological_finds/models.py
+++ b/archaeological_finds/models.py
@@ -23,9 +23,11 @@ from django.conf import settings
from django.contrib.gis.db import models
from django.core.urlresolvers import reverse
from django.db.models import Max, Q
-from django.db.models.signals import m2m_changed
+from django.db.models.signals import m2m_changed, post_save
from django.utils.translation import ugettext_lazy as _, ugettext
+from ishtar_common.utils import cached_label_changed
+
from ishtar_common.models import GeneralType, ImageModel, BaseHistorizedItem, \
ShortMenuItem, LightHistorizedItem, HistoricalRecords, OwnPerms, Source, \
Person, Basket, get_external_id
@@ -275,6 +277,7 @@ class FindBasket(Basket):
class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem):
CHECK_DICT = dict(CHECK_CHOICES)
SHOW_URL = 'show-find'
+ SLUG = 'find'
TABLE_COLS = ['label', 'material_types', 'datings.period',
'base_finds.context_record.parcel.town',
'base_finds.context_record.operation.year',
@@ -374,6 +377,7 @@ class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem):
default=datetime.date.today)
estimated_value = models.FloatField(_(u"Estimated value"), blank=True,
null=True)
+ cached_label = models.TextField(_(u"Cached name"), null=True, blank=True)
history = HistoricalRecords()
BASKET_MODEL = FindBasket
IMAGE_PREFIX = 'finds/'
@@ -388,13 +392,18 @@ class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem):
("change_own_find", ugettext(u"Can change own Find")),
("delete_own_find", ugettext(u"Can delete own Find")),
)
+ ordering = ('cached_label',)
@property
def short_class_name(self):
return _(u"FIND")
def __unicode__(self):
- return self.label
+ lbl = settings.JOINT.join([
+ getattr(self, attr)
+ for attr in ('administrative_index', 'label')
+ if getattr(self, attr)])
+ return lbl
@property
def short_label(self):
@@ -441,8 +450,8 @@ class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem):
@property
def administrative_index(self):
bf = self.get_first_base_find()
- if not bf:
- return
+ if not bf or not bf.context_record or not bf.context_record.operation:
+ return ""
return "{}-{}".format(
bf.context_record.operation.get_reference(),
self.index)
@@ -564,6 +573,17 @@ class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem):
ishtaruser.person) |\
Q(history_creator=user)
+ @classmethod
+ def get_owns(cls, user, menu_filtr=None):
+ replace_query = {}
+ if menu_filtr:
+ replace_query = {'base_finds__context_record': menu_filtr}
+ owns = super(Find, cls).get_owns(user, replace_query=replace_query)
+ return sorted(owns, key=lambda x: x.cached_label)
+
+ def _generate_cached_label(self):
+ return unicode(self)
+
def save(self, *args, **kwargs):
super(Find, self).save(*args, **kwargs)
@@ -624,6 +644,9 @@ class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem):
# idx and idx['material_index__max'] + 1 or 1
+post_save.connect(cached_label_changed, sender=Find)
+
+
def base_find_find_changed(sender, **kwargs):
obj = kwargs.get('instance', None)
if not obj: