summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2021-01-11 14:04:19 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2021-02-28 12:15:23 +0100
commit6c6062dc666dce915d04a27856777d5491db1380 (patch)
tree483f2df6fb353af6bfb3f70eb4ffadb0d3ba5374 /ishtar_common
parented955319c88a6c945e3508b7ecfd8c0271e4046b (diff)
downloadIshtar-6c6062dc666dce915d04a27856777d5491db1380.tar.bz2
Ishtar-6c6062dc666dce915d04a27856777d5491db1380.zip
Add grammatical gender to organizations
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/admin.py3
-rw-r--r--ishtar_common/forms_common.py7
-rw-r--r--ishtar_common/migrations/0211_auto_20210111_1321.py25
-rw-r--r--ishtar_common/models.py54
-rw-r--r--ishtar_common/models_common.py7
5 files changed, 70 insertions, 26 deletions
diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py
index 269c12927..75e79b714 100644
--- a/ishtar_common/admin.py
+++ b/ishtar_common/admin.py
@@ -388,6 +388,9 @@ class OrganizationAdmin(HistorizedObjectAdmin):
search_fields = ('name',)
exclude = ('merge_key', 'merge_exclusion', 'merge_candidate', )
model = models.Organization
+ form = make_ajax_form(
+ model, {'precise_town': 'town'}
+ )
admin_site.register(models.Organization, OrganizationAdmin)
diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py
index e15a4ef23..96a473c28 100644
--- a/ishtar_common/forms_common.py
+++ b/ishtar_common/forms_common.py
@@ -339,6 +339,10 @@ class OrganizationForm(ManageOldType, NewItemForm):
organization_type = forms.ChoiceField(label=_("Organization type"),
choices=[])
url = forms.URLField(label=_("Web address"), required=False)
+ grammatical_gender = forms.ChoiceField(
+ label=_("Grammatical gender"),
+ choices=[('', '--')] + list(models.GENDER),
+ required=False, help_text=_("Can be used by templates"))
address = forms.CharField(label=_("Address"), widget=forms.Textarea,
required=False)
address_complement = forms.CharField(label=_("Address complement"),
@@ -536,7 +540,8 @@ class BaseOrganizationForm(forms.ModelForm):
class Meta:
model = models.Organization
- fields = ['name', 'organization_type', 'address', 'address_complement',
+ fields = ['name', 'organization_type',
+ 'grammatical_gender', 'address', 'address_complement',
'town', 'postal_code']
diff --git a/ishtar_common/migrations/0211_auto_20210111_1321.py b/ishtar_common/migrations/0211_auto_20210111_1321.py
new file mode 100644
index 000000000..eb47992ad
--- /dev/null
+++ b/ishtar_common/migrations/0211_auto_20210111_1321.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.27 on 2021-01-11 13:21
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('ishtar_common', '0210_auto_20210106_1127'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='historicalorganization',
+ name='grammatical_gender',
+ field=models.CharField(blank=True, choices=[('M', 'Male'), ('F', 'Female'), ('N', 'Neutral')], default='', max_length=1, verbose_name='Grammatical gender'),
+ ),
+ migrations.AddField(
+ model_name='organization',
+ name='grammatical_gender',
+ field=models.CharField(blank=True, choices=[('M', 'Male'), ('F', 'Female'), ('N', 'Neutral')], default='', max_length=1, verbose_name='Grammatical gender'),
+ ),
+ ]
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):
diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py
index 65b90157e..3bd97e192 100644
--- a/ishtar_common/models_common.py
+++ b/ishtar_common/models_common.py
@@ -170,8 +170,11 @@ class GeneralType(Cached, models.Model):
"""
Used for automatic documentation generation
"""
- return "**label** {}, **txt_idx** {}".format(str(_("Label")),
- str(_("Textual ID")))
+ s = "**label** {}, **txt_idx** {}".format(str(_("Label")),
+ str(_("Textual ID")))
+ if hasattr(cls, "extra_documentation_string"):
+ s += cls.extra_documentation_string()
+ return s
@classmethod
def admin_url(cls):