diff options
Diffstat (limited to 'ishtar_common')
| -rw-r--r-- | ishtar_common/admin.py | 3 | ||||
| -rw-r--r-- | ishtar_common/forms_common.py | 7 | ||||
| -rw-r--r-- | ishtar_common/migrations/0211_auto_20210111_1321.py | 25 | ||||
| -rw-r--r-- | ishtar_common/models.py | 54 | ||||
| -rw-r--r-- | ishtar_common/models_common.py | 7 | 
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): | 
