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.py97
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'