diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-10-16 12:10:17 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-10-16 12:10:17 +0200 |
commit | 5aa11c751acecb6d5a3a56f45f74d17d64a358d1 (patch) | |
tree | ad04d9e574e9d1523ae3b967fc781f0b9d2c3238 /archaeological_operations | |
parent | b6f5261620d6518a0e5a9da1e638ab97be716609 (diff) | |
download | Ishtar-5aa11c751acecb6d5a3a56f45f74d17d64a358d1.tar.bz2 Ishtar-5aa11c751acecb6d5a3a56f45f74d17d64a358d1.zip |
Natural keys for operations, context records, finds, etc.
Diffstat (limited to 'archaeological_operations')
-rw-r--r-- | archaeological_operations/models.py | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py index 637bbb7be..c4d7e489c 100644 --- a/archaeological_operations/models.py +++ b/archaeological_operations/models.py @@ -84,6 +84,9 @@ class ReportState(GeneralType): post_save.connect(post_save_cache, sender=ReportState) post_delete.connect(post_save_cache, sender=ReportState) +class SiteManager(models.Manager): + def get_by_natural_key(self, txt_idx): + return self.get(reference=txt_idx) class RecordQualityType(GeneralType): order = models.IntegerField(_(u"Order")) @@ -185,6 +188,7 @@ class ArchaeologicalSite(BaseHistorizedItem, OwnPerms, ValueGetter, activate(language_code) EXTRA_REQUEST_KEYS[unicode(v[0])] = v[1] deactivate() + objects = SiteManager() reference = models.CharField(_(u"Reference"), max_length=200, unique=True) name = models.CharField(_(u"Name"), max_length=200, @@ -265,6 +269,9 @@ class ArchaeologicalSite(BaseHistorizedItem, OwnPerms, ValueGetter, ])) return name + def natural_key(self): + return (self.reference, ) + @property def external_id(self): return self.reference @@ -379,6 +386,10 @@ class ClosedItem(object): user = q.all()[0] return {'date': date, 'user': user} +class OperationManager(models.Manager): + def get_by_natural_key(self, txt_idx): + return self.get(code_patriarche=txt_idx) + class Operation(ClosedItem, BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem, DashboardFormItem, RelationItem): @@ -481,6 +492,7 @@ class Operation(ClosedItem, BaseHistorizedItem, OwnPerms, ValueGetter, ) }, } + objects = OperationManager() # alternative names of fields for searches ALT_NAMES = { @@ -783,6 +795,9 @@ class Operation(ClosedItem, BaseHistorizedItem, OwnPerms, ValueGetter, ) ordering = ('cached_label',) + def natural_key(self): + return (self.code_patriarche, ) + @classmethod def get_owns(cls, user, menu_filtr=None, limit=None, values=None, get_short_menu_class=None): @@ -1811,10 +1826,24 @@ def strip_zero(value): return value +class ParcelManager(models.Manager): + def get_by_natural_key(self, associated_file, operation, year, town_insee, + town_year, section, parcel_number): + q = {"year": year, "town__numero_insee": town_insee, + "town__year": town_year, + "section": section, "parcel_number": parcel_number} + if associated_file: + q['associated_file__external_id'] = associated_file + if operation: + q['operation__code_patriarche'] = operation + return self.get(**q) + + class Parcel(LightHistorizedItem): EXTERNAL_ID_KEY = 'parcel_external_id' BASE_SEARCH_VECTORS = ['section', 'parcel_number'] PARENT_SEARCH_VECTORS = ['operation'] + objects = ParcelManager() associated_file = models.ForeignKey( 'archaeological_files.File', @@ -1855,6 +1884,13 @@ class Parcel(LightHistorizedItem): def __unicode__(self): return self.short_label + def natural_key(self): + return ( + self.associated_file.external_id if self.associated_file else '', + self.operation.code_patriarche if self.operation else '', + self.year, self.town.numero_insee, self.town.year, self.section, + self.parcel_number) + """ def merge(self, parcel): # cannot automatically merge |