diff options
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 |
commit | 932df423de39c878111fd7afae0be153910062bb (patch) | |
tree | 59399442d667e36ee901051e48e1eab2efea2cc1 /ishtar_common | |
parent | 785d6dbe94ef643ddbd1860de9bf9318878a4e35 (diff) | |
download | Ishtar-932df423de39c878111fd7afae0be153910062bb.tar.bz2 Ishtar-932df423de39c878111fd7afae0be153910062bb.zip |
Natural key for warehouse, container.
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/models.py | 52 |
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): |