summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2018-10-16 17:02:58 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2018-10-16 17:02:58 +0200
commit932df423de39c878111fd7afae0be153910062bb (patch)
tree59399442d667e36ee901051e48e1eab2efea2cc1 /ishtar_common
parent785d6dbe94ef643ddbd1860de9bf9318878a4e35 (diff)
downloadIshtar-932df423de39c878111fd7afae0be153910062bb.tar.bz2
Ishtar-932df423de39c878111fd7afae0be153910062bb.zip
Natural key for warehouse, container.
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/models.py52
1 files changed, 51 insertions, 1 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index a73ba8155..c9fc8eec4 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -441,7 +441,7 @@ def post_save_cache(sender, **kwargs):
sender.refresh_cache()
-class ExternalIdManager(models.Manager):
+class ExternalIdManager(models.GeoManager):
def get_by_natural_key(self, external_id):
return self.get(external_id=external_id)
@@ -2604,6 +2604,11 @@ organization_type_pk_lazy = lazy(OrganizationType.get_or_create_pk, unicode)
organization_type_pks_lazy = lazy(OrganizationType.get_or_create_pks, unicode)
+class OrganizationManager(models.Manager):
+ def get_by_natural_key(self, name, organization_type):
+ return self.get(name=name, organization_type__txt_idx=organization_type)
+
+
class Organization(Address, Merge, OwnPerms, ValueGetter):
TABLE_COLS = ('name', 'organization_type', 'town')
SHOW_URL = 'show-organization'
@@ -2628,6 +2633,7 @@ class Organization(Address, Merge, OwnPerms, ValueGetter):
activate(language_code)
EXTRA_REQUEST_KEYS[unicode(v[0])] = v[1]
deactivate()
+ objects = OrganizationManager()
# fields
name = models.CharField(_(u"Name"), max_length=500)
@@ -2653,6 +2659,8 @@ class Organization(Address, Merge, OwnPerms, ValueGetter):
return self.name
return u"{} - {}".format(self.organization_type,
self.town or "")
+ def natural_key(self):
+ return (self.name, self.organization_type.txt_idx)
def __unicode__(self):
if self.cached_label:
@@ -2715,6 +2723,19 @@ post_save.connect(post_save_cache, sender=TitleType)
post_delete.connect(post_save_cache, sender=TitleType)
+class PersonManager(models.Manager):
+ def get_by_natural_key(
+ self, name, surname, attached_to_name,
+ attached_to_organization_type):
+ q = {"name": name, "surname": surname}
+ if attached_to_name:
+ q['attached_to__name'] = attached_to_name
+ if attached_to_organization_type:
+ q['attached_to__organization_type__txt_idx'] = \
+ attached_to_organization_type
+ return self.get(**q)
+
+
class Person(Address, Merge, OwnPerms, ValueGetter):
_prefix = 'person_'
TYPE = (
@@ -2775,6 +2796,7 @@ class Person(Address, Merge, OwnPerms, ValueGetter):
activate(language_code)
EXTRA_REQUEST_KEYS[unicode(v[0])] = v[1]
deactivate()
+ objects = PersonManager()
# fields
old_title = models.CharField(_(u"Title"), max_length=100, choices=TYPE,
@@ -2811,6 +2833,12 @@ class Person(Address, Merge, OwnPerms, ValueGetter):
("delete_own_person", u"Can delete own Person"),
)
+ def natural_key(self):
+ if not self.attached_to:
+ return (self.name, self.surname, '', '')
+ return (self.name, self.surname, self.attached_to.name,
+ self.attached_to.organization_type.txt_idx)
+
@property
def full_title(self):
return u" ".join(
@@ -3299,6 +3327,20 @@ post_save.connect(post_save_cache, sender=AuthorType)
post_delete.connect(post_save_cache, sender=AuthorType)
+class AuthorManager(models.Manager):
+ def get_by_natural_key(
+ self, name, surname, attached_to_name,
+ attached_to_organization_type, author_type):
+ q = {"name": name, "surname": surname,
+ "author_type__txt_idx": author_type}
+ if attached_to_name:
+ q['attached_to__name'] = attached_to_name
+ if attached_to_organization_type:
+ q['attached_to__organization_type__txt_idx'] = \
+ attached_to_organization_type
+ return self.get(**q)
+
+
class Author(FullSearch):
PARENT_SEARCH_VECTORS = ['person']
SLUG = "author"
@@ -3308,6 +3350,7 @@ class Author(FullSearch):
author_type = models.ForeignKey(AuthorType, verbose_name=_(u"Author type"))
cached_label = models.TextField(_(u"Cached name"), null=True, blank=True,
db_index=True)
+ objects = AuthorManager()
class Meta:
verbose_name = _(u"Author")
@@ -3327,6 +3370,9 @@ class Author(FullSearch):
self.save()
return self.cached_label
+ def natural_key(self):
+ return self.person.natural_key() + (self.author_type.txt_idx, )
+
def _generate_cached_label(self):
return unicode(self.person) + settings.JOINT + \
unicode(self.author_type)
@@ -3476,6 +3522,7 @@ class Document(OwnPerms, ImageModel, FullSearch, Imported):
activate(language_code)
EXTRA_REQUEST_KEYS[unicode(v[0])] = v[1]
deactivate()
+ objects = ExternalIdManager()
title = models.TextField(_(u"Title"), blank=True, default='')
associated_file = models.FileField(
@@ -3543,6 +3590,9 @@ class Document(OwnPerms, ImageModel, FullSearch, Imported):
def __unicode__(self):
return self.title
+ def natural_key(self):
+ return (self.external_id, )
+
"""
@property
def code(self):