diff options
Diffstat (limited to 'archaeological_finds/models.py')
-rw-r--r-- | archaeological_finds/models.py | 31 |
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: |