diff options
Diffstat (limited to 'archaeological_finds/models.py')
-rw-r--r-- | archaeological_finds/models.py | 97 |
1 files changed, 84 insertions, 13 deletions
diff --git a/archaeological_finds/models.py b/archaeological_finds/models.py index 5581df084..5799d0e9a 100644 --- a/archaeological_finds/models.py +++ b/archaeological_finds/models.py @@ -327,6 +327,46 @@ class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem): 'base_finds.discovery_date': _(u"Base find - Discovery date"), } ATTRS_EQUIV = {'get_first_base_find': 'base_finds'} + + # search parameters + REVERSED_BOOL_FIELDS = ['image__isnull'] + RELATION_TYPES_PREFIX = { + 'ope_relation_types': + 'base_finds__context_record__operation__'} + RELATIVE_SESSION_NAMES = [ + ('contextrecord', 'base_finds__context_record__pk'), + ('operation', 'base_finds__context_record__operation__pk'), + ('file', 'base_finds__context_record__operation__associated_file__pk') + ] + BASE_REQUEST = {'downstream_treatment__isnull': True} + EXTRA_REQUEST_KEYS = { + 'base_finds__cache_short_id': + 'base_finds__cache_short_id__icontains', + 'base_finds__cache_complete_id': + 'base_finds__cache_complete_id__icontains', + 'label': + 'label__icontains', + 'base_finds__context_record': + 'base_finds__context_record__pk', + 'base_finds__context_record__parcel__town': + 'base_finds__context_record__parcel__town', + 'base_finds__context_record__operation__year': + 'base_finds__context_record__operation__year__contains', + 'base_finds__context_record__operation': + 'base_finds__context_record__operation__pk', + 'archaeological_sites': + 'base_finds__context_record__operation__archaeological_sites__pk', + 'base_finds__context_record__operation__code_patriarche': + 'base_finds__context_record__operation__code_patriarche', + 'datings__period': 'datings__period__pk', + 'base_finds__find__description': + 'base_finds__find__description__icontains', + 'base_finds__batch': 'base_finds__batch', + 'basket': 'basket', + 'cached_label': 'cached_label__icontains', + 'image': 'image__isnull'} + + # fields base_finds = models.ManyToManyField(BaseFind, verbose_name=_(u"Base find"), related_name='find') external_id = models.TextField(_(u"External ID"), blank=True, null=True) @@ -594,7 +634,9 @@ class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem): owns = super(Find, cls).get_owns( user, replace_query=replace_query, limit=limit) - return sorted(owns, key=lambda x: x.cached_label) + return sorted( + owns, key=lambda x: x.cached_label + if hasattr(x, 'cached_label') else unicode(x)) def _generate_cached_label(self): return unicode(self) @@ -603,6 +645,7 @@ class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem): super(Find, self).save(*args, **kwargs) updated = False + self.skip_history_when_saving = True if not self.external_id or self.auto_external_id: external_id = get_external_id('find_external_id', self) if external_id != self.external_id: @@ -636,19 +679,16 @@ class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem): modified = True base_find.index = BaseFind.get_max_index( base_find.context_record.operation) + 1 - if not base_find.cache_short_id or \ - not base_find.cache_short_id.endswith( - unicode(base_find.index)): - base_find.cache_short_id = base_find.short_id() - if base_find.cache_short_id: - modified = True - if not base_find.cache_complete_id or \ - not base_find.cache_complete_id.endswith( - unicode(base_find.index)): - base_find.cache_complete_id = base_find.complete_id() - if base_find.cache_complete_id: - modified = True + short_id = base_find.short_id() + if base_find.cache_short_id != short_id: + base_find.cache_short_id = short_id + modified = True + complete_id = base_find.complete_id() + if base_find.cache_complete_id != complete_id: + base_find.cache_complete_id = complete_id + modified = True if modified: + base_find.skip_history_when_saving = True base_find.save() # if not base_find.material_index: # idx = BaseFind.objects\ @@ -679,6 +719,31 @@ class FindSource(Source): 'find__base_finds__context_record', 'find'] + \ Source.TABLE_COLS + # search parameters + BOOL_FIELDS = ['duplicate'] + RELATIVE_SESSION_NAMES = [ + ('find', 'find__pk'), + ('contextrecord', 'find__base_finds__context_record__pk'), + ('operation', 'find__base_finds__context_record__operation__pk'), + ('file', + 'find__base_finds__context_record__operation__associated_file__pk') + ] + EXTRA_REQUEST_KEYS = { + 'title': 'title__icontains', + 'description': 'description__icontains', + 'comment': 'comment__icontains', + 'additional_information': 'additional_information__icontains', + 'person': 'authors__person__pk', + 'find__base_finds__context_record__operation__year': + 'find__base_finds__context_record__operation__year', + 'find__base_finds__context_record__operation__operation_code': + 'find__base_finds__context_record__operation__operation_code', + 'find__base_finds__context_record__operation__code_patriarche': + 'find__base_finds__context_record__operation__code_patriarche', + 'find__datings__period': 'find__datings__period__pk', + 'find__description': 'find__description__icontains', + } + class Meta: verbose_name = _(u"Find documentation") verbose_name_plural = _(u"Find documentations") @@ -846,6 +911,9 @@ class FindUpstreamTreatments(AbsFindTreatments): 'treatment__location', 'treatment__container', 'treatment__person', 'treatment_nb'] + # search parameters + EXTRA_REQUEST_KEYS = {'find_id': 'find_id'} + class Meta: managed = False db_table = 'find_uptreatments' @@ -887,6 +955,9 @@ class FindDownstreamTreatments(AbsFindTreatments): 'treatment__location', 'treatment__container', 'treatment__person', 'treatment_nb'] + # search parameters + EXTRA_REQUEST_KEYS = {'find_id': 'find_id'} + class Meta: managed = False db_table = 'find_downtreatments' |