summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/fr/source/annexe-tech-3-variables-gen.rst3
-rw-r--r--docs/generate_values_doc.py5
-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
7 files changed, 76 insertions, 28 deletions
diff --git a/docs/fr/source/annexe-tech-3-variables-gen.rst b/docs/fr/source/annexe-tech-3-variables-gen.rst
index 88924c50b..5dc5a9d75 100644
--- a/docs/fr/source/annexe-tech-3-variables-gen.rst
+++ b/docs/fr/source/annexe-tech-3-variables-gen.rst
@@ -7,7 +7,7 @@ Annexe technique 3 - Variables
==============================
:Auteurs: Étienne Loks, Ishtar team
-:Date: 2021-01-08
+:Date: 2021-01-11
:Copyright: CC-BY 3.0
:Ishtar Version: v3.1.0
@@ -144,6 +144,7 @@ Chaque organisation dispose des :ref:`champs adresse <valeurs-champs-adresse>`,
- **cached_label** : *Texte* - Nom en cache
- **files__** : *→ Dossiers archéologiques (organisation)*
- **general_contractor_files__** : *→ Dossiers archéologiques (organisation de l'aménageur)*
+- **grammatical_gender** : *Chaîne de caractères (1)* - Grammatical gender - "M": Male ; "F": Female ; "N": Neutral
- **members__** : *→ Personnes (est rattaché à)*
- **name** : *Chaîne de caractères (500)* - Nom
- **operation_applicant_authority__** : *→ Opérations (autorité requérante)*
diff --git a/docs/generate_values_doc.py b/docs/generate_values_doc.py
index ed13f5c21..73dc41f5e 100644
--- a/docs/generate_values_doc.py
+++ b/docs/generate_values_doc.py
@@ -74,7 +74,10 @@ def get_values(tpl_model, model, excluded, model_types):
help_text = ""
if getattr(field, "help_text", None):
- help_text = str(field.help_text)
+ h = field.help_text
+ if callable(h):
+ h = h()
+ help_text = str(h)
if getattr(field, "related_model", None):
key = field.name + "__"
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):