From 6c6062dc666dce915d04a27856777d5491db1380 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Mon, 11 Jan 2021 14:04:19 +0100 Subject: Add grammatical gender to organizations --- ishtar_common/models.py | 54 ++++++++++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 23 deletions(-) (limited to 'ishtar_common/models.py') diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 98546c727..e9ab2b878 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -1733,10 +1733,29 @@ GENDER = ( ) -class GenderedType(GeneralType): +def documentation_get_gender_values(): + doc = "" + for idx, gender in enumerate(GENDER): + key, label = gender + if idx: + doc += " ;" + doc += ' "{}": {}'.format(key, label) + return doc + + +class BaseGenderedType(ValueGetter): + @classmethod + def get_values(self, prefix='', **kwargs): + dct = super(BaseGenderedType, self).get_values(prefix=prefix, **kwargs) + assert hasattr(self, "grammatical_gender") + dct[prefix + "grammatical_gender"] = self.grammatical_gender + return dct + + +class GenderedType(BaseGenderedType, GeneralType): grammatical_gender = models.CharField( _("Grammatical gender"), max_length=1, choices=GENDER, - blank=True, default="") + blank=True, default="", help_text=documentation_get_gender_values) class Meta: abstract = True @@ -1748,24 +1767,9 @@ class GenderedType(GeneralType): """ doc = super(GenderedType, cls).get_documentation_string() doc += ", **grammatical_gender** {} -".format(_("Grammatical gender")) - for idx, gender in enumerate(GENDER): - key, label = gender - if idx: - doc += " ;" - doc += ' "{}": {}'.format(key, label) + doc += documentation_get_gender_values() return doc - def get_values(self, prefix='', **kwargs): - dct = { - prefix: self.label, - prefix + "id": self.pk, - prefix + "txt_idx": self.txt_idx, - prefix + "grammatical_gender": self.grammatical_gender - } - if prefix: - dct[prefix[:-1]] = self.label - return dct - class OrganizationType(GenderedType): class Meta: @@ -1797,7 +1801,8 @@ organization_type_pk_lazy = lazy(OrganizationType.get_or_create_pk, str) organization_type_pks_lazy = lazy(OrganizationType.get_or_create_pks, str) -class Organization(Address, Merge, OwnPerms, ValueGetter, MainItem): +class Organization(Address, Merge, OwnPerms, BaseGenderedType, ValueGetter, + MainItem): TABLE_COLS = ('name', 'organization_type', 'town') SLUG = "organization" SHOW_URL = 'show-organization' @@ -1835,6 +1840,9 @@ class Organization(Address, Merge, OwnPerms, ValueGetter, MainItem): organization_type = models.ForeignKey(OrganizationType, verbose_name=_("Type")) url = models.URLField(verbose_name=_("Web address"), blank=True, null=True) + grammatical_gender = models.CharField( + _("Grammatical gender"), max_length=1, choices=GENDER, + blank=True, default="", help_text=documentation_get_gender_values) cached_label = models.TextField(_("Cached name"), blank=True, default="", db_index=True) @@ -1858,7 +1866,7 @@ class Organization(Address, Merge, OwnPerms, ValueGetter, MainItem): if self.name: return self.name return "{} - {}".format(self.organization_type, - self.town or "") + self.town or "") def natural_key(self): return (self.uuid,) @@ -1877,7 +1885,7 @@ class Organization(Address, Merge, OwnPerms, ValueGetter, MainItem): return " - ".join(items) def generate_merge_key(self): - self.merge_key = slugify(self.name if self.name else '') + self.merge_key = slugify(self.name or '') if not self.merge_key: self.merge_key = self.EMPTY_MERGE_KEY if self.town: @@ -2127,8 +2135,8 @@ class Person(Address, Merge, OwnPerms, ValueGetter, MainItem): @property def full_title(self): return " ".join( - [str(getattr(self, attr)) - for attr in ['title', 'salutation'] if getattr(self, attr)]) + str(getattr(self, attr)) + for attr in ['title', 'salutation'] if getattr(self, attr)) @property def current_profile(self): -- cgit v1.2.3