Skip to content

Commit

Permalink
Refactor out translation field name list generation, make translation…
Browse files Browse the repository at this point in the history
… field order consistent, add model translated field unit test, move Portuguese ahead of Arabic, apply unique, primary_key and blank only on translation field for default language, see HEA-141
  • Loading branch information
chrispreee committed Jan 17, 2024
1 parent 9e63b48 commit faa3790
Show file tree
Hide file tree
Showing 20 changed files with 422 additions and 434 deletions.
57 changes: 19 additions & 38 deletions apps/baseline/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from django.contrib import admin

from common.admin import GeoModelAdmin
from common.fields import translation_fields
from metadata.models import LivelihoodStrategyType

from .forms import (
Expand Down Expand Up @@ -70,8 +71,8 @@ class LivelihoodZoneAdmin(admin.ModelAdmin):
)
search_fields = [
"code",
"name",
"description",
*translation_fields("name"),
*translation_fields("description"),
"country__iso_en_ro_name",
]
list_filter = ("country",)
Expand All @@ -84,7 +85,7 @@ class LivelihoodZoneBaselineAdmin(GeoModelAdmin):
{
"fields": [
"livelihood_zone",
"name",
*translation_fields("name"),
"main_livelihood_category",
"source_organization",
"bss",
Expand All @@ -96,7 +97,7 @@ class LivelihoodZoneBaselineAdmin(GeoModelAdmin):
"data_collection_start_date",
"data_collection_end_date",
"publication_date",
"description",
*translation_fields("description"),
]
},
),
Expand All @@ -119,15 +120,11 @@ class LivelihoodZoneBaselineAdmin(GeoModelAdmin):
"reference_year_start_date",
"reference_year_end_date",
)
search_fields = [
"livelihood_zone__name",
"main_livelihood_category__name_en",
"main_livelihood_category__name_fr",
"main_livelihood_category__name_ar",
"main_livelihood_category__name_es",
"main_livelihood_category__name_ar",
search_fields = (
*translation_fields("livelihood_zone__name"),
*translation_fields("main_livelihood_category__name"),
"source_organization__name",
]
)
list_filter = [
"source_organization",
"livelihood_zone__country",
Expand All @@ -152,10 +149,10 @@ class CommunityAdmin(GeoModelAdmin):
search_fields = (
"name",
"full_name",
"livelihood_zone_baseline__livelihood_zone__name",
*translation_fields("livelihood_zone_baseline__livelihood_zone__name"),
)
list_filter = (
"livelihood_zone_baseline__livelihood_zone__name",
*translation_fields("livelihood_zone_baseline__livelihood_zone__name"),
"livelihood_zone_baseline__livelihood_zone__country",
)

Expand All @@ -179,13 +176,10 @@ class LivelihoodStrategyAdmin(admin.ModelAdmin):
)
search_fields = (
"strategy_type",
"livelihood_zone_baseline__livelihood_zone__name",
"product__common_name_en",
"product__common_name_fr",
"product__common_name_ar",
"product__common_name_es",
"product__common_name_pt",
*translation_fields("livelihood_zone_baseline__livelihood_zone__name"),
*translation_fields("product__common_name"),
)

list_filter = (
"strategy_type",
"livelihood_zone_baseline__livelihood_zone",
Expand Down Expand Up @@ -476,7 +470,7 @@ class WealthGroupAdmin(admin.ModelAdmin):
list_filter = (
"livelihood_zone_baseline__source_organization",
"livelihood_zone_baseline__livelihood_zone__country",
"livelihood_zone_baseline__livelihood_zone__name",
*translation_fields("livelihood_zone_baseline__livelihood_zone__name"),
"community",
"wealth_group_category",
)
Expand Down Expand Up @@ -572,18 +566,11 @@ class CommunityCropProductionAdmin(admin.ModelAdmin):
"land_unit_of_measure",
)
search_fields = (
"crop__description_en",
"crop__description_fr",
"crop__description_ar",
"crop__description_es",
"crop__description_pt",
*translation_fields("crop__description"),
"crop_purpose",
"season__name_en",
"season__name_fr",
"season__name_ar",
"season__name_es",
"season__name_pt",
*translation_fields("season__name"),
)

list_filter = (
"community__livelihood_zone_baseline__livelihood_zone",
"community__full_name",
Expand All @@ -610,13 +597,7 @@ class CommunityLivestockAdmin(admin.ModelAdmin):
"wet_season_milk_production",
"dry_season_milk_production",
)
search_fields = (
"livestock__common_name_en",
"livestock__common_name_fr",
"livestock__common_name_ar",
"livestock__common_name_es",
"livestock__common_name_pt",
)
search_fields = (*translation_fields("livestock__common_name"),)
list_filter = (
"community__livelihood_zone_baseline__livelihood_zone",
"community__full_name",
Expand Down
153 changes: 153 additions & 0 deletions apps/baseline/migrations/0004_add_translation_fields.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
from django.db import migrations

import common.fields


class Migration(migrations.Migration):

dependencies = [
("baseline", "0003_alter_communitylivestock_options"),
]

operations = [
migrations.RenameField(
model_name="livelihoodzone",
old_name="description",
new_name="description_en",
),
migrations.RenameField(
model_name="livelihoodzone",
old_name="name",
new_name="name_en",
),
migrations.RenameField(
model_name="livelihoodzonebaseline",
old_name="description",
new_name="description_en",
),
migrations.RenameField(
model_name="livelihoodzonebaseline",
old_name="name",
new_name="name_en",
),
migrations.AddField(
model_name="livelihoodzone",
name="description_ar",
field=common.fields.DescriptionField(
blank=True,
help_text="Any extra information or detail that is relevant to the object.",
max_length=2000,
verbose_name="Description",
),
),
migrations.AddField(
model_name="livelihoodzone",
name="description_es",
field=common.fields.DescriptionField(
blank=True,
help_text="Any extra information or detail that is relevant to the object.",
max_length=2000,
verbose_name="Description",
),
),
migrations.AddField(
model_name="livelihoodzone",
name="description_fr",
field=common.fields.DescriptionField(
blank=True,
help_text="Any extra information or detail that is relevant to the object.",
max_length=2000,
verbose_name="Description",
),
),
migrations.AddField(
model_name="livelihoodzone",
name="description_pt",
field=common.fields.DescriptionField(
blank=True,
help_text="Any extra information or detail that is relevant to the object.",
max_length=2000,
verbose_name="Description",
),
),
migrations.AddField(
model_name="livelihoodzone",
name="name_ar",
field=common.fields.NameField(blank=True, max_length=200, verbose_name="Name"),
),
migrations.AddField(
model_name="livelihoodzone",
name="name_es",
field=common.fields.NameField(blank=True, max_length=200, verbose_name="Name"),
),
migrations.AddField(
model_name="livelihoodzone",
name="name_fr",
field=common.fields.NameField(blank=True, max_length=200, verbose_name="Name"),
),
migrations.AddField(
model_name="livelihoodzone",
name="name_pt",
field=common.fields.NameField(blank=True, max_length=200, verbose_name="Name"),
),
migrations.AddField(
model_name="livelihoodzonebaseline",
name="description_ar",
field=common.fields.DescriptionField(
blank=True,
help_text="Any extra information or detail that is relevant to the object.",
max_length=2000,
verbose_name="Description",
),
),
migrations.AddField(
model_name="livelihoodzonebaseline",
name="description_es",
field=common.fields.DescriptionField(
blank=True,
help_text="Any extra information or detail that is relevant to the object.",
max_length=2000,
verbose_name="Description",
),
),
migrations.AddField(
model_name="livelihoodzonebaseline",
name="description_fr",
field=common.fields.DescriptionField(
blank=True,
help_text="Any extra information or detail that is relevant to the object.",
max_length=2000,
verbose_name="Description",
),
),
migrations.AddField(
model_name="livelihoodzonebaseline",
name="description_pt",
field=common.fields.DescriptionField(
blank=True,
help_text="Any extra information or detail that is relevant to the object.",
max_length=2000,
verbose_name="Description",
),
),
migrations.AddField(
model_name="livelihoodzonebaseline",
name="name_ar",
field=common.fields.NameField(blank=True, max_length=200, verbose_name="Name"),
),
migrations.AddField(
model_name="livelihoodzonebaseline",
name="name_es",
field=common.fields.NameField(blank=True, max_length=200, verbose_name="Name"),
),
migrations.AddField(
model_name="livelihoodzonebaseline",
name="name_fr",
field=common.fields.NameField(blank=True, max_length=200, verbose_name="Name"),
),
migrations.AddField(
model_name="livelihoodzonebaseline",
name="name_pt",
field=common.fields.NameField(blank=True, max_length=200, verbose_name="Name"),
),
]
9 changes: 5 additions & 4 deletions apps/baseline/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from model_utils.managers import InheritanceManager

import common.models as common_models
from common.fields import TranslatedField
from common.models import (
ClassifiedProduct,
Country,
Expand Down Expand Up @@ -84,8 +85,8 @@ class LivelihoodZone(common_models.Model):
verbose_name=_("code"),
help_text=_("Primary identifier for the Livelihood Zone"),
)
name = common_models.NameField(max_length=200, unique=True)
description = common_models.DescriptionField()
name = TranslatedField(common_models.NameField(max_length=200, unique=True))
description = TranslatedField(common_models.DescriptionField())
country = models.ForeignKey(Country, verbose_name=_("Country"), db_column="country_code", on_delete=models.PROTECT)

class Meta:
Expand Down Expand Up @@ -123,8 +124,8 @@ class LivelihoodZoneBaseline(common_models.Model):
June 2023 for the Sahel countries.
"""

name = common_models.NameField(max_length=200, unique=True)
description = common_models.DescriptionField()
name = TranslatedField(common_models.NameField(max_length=200, unique=True))
description = TranslatedField(common_models.DescriptionField())
livelihood_zone = models.ForeignKey(
LivelihoodZone, db_column="livelihood_zone_code", on_delete=models.RESTRICT, verbose_name=_("Livelihood Zone")
)
Expand Down
10 changes: 6 additions & 4 deletions apps/baseline/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,22 +53,24 @@ class Meta:
class LivelihoodZoneSerializer(serializers.ModelSerializer):
class Meta:
model = LivelihoodZone
fields = [
fields = (
"code",
"name",
"description",
"country",
"country_name",
]
)

country_name = serializers.CharField(source="country.iso_en_ro_name", read_only=True)


class LivelihoodZoneBaselineSerializer(serializers.ModelSerializer):
class Meta:
model = LivelihoodZoneBaseline
fields = [
fields = (
"id",
"name",
"description",
"source_organization",
"source_organization_name",
"livelihood_zone",
Expand All @@ -85,7 +87,7 @@ class Meta:
"valid_to_date",
"population_source",
"population_estimate",
]
)

livelihood_zone_name = serializers.CharField(source="livelihood_zone.name", read_only=True)
source_organization_name = serializers.CharField(source="source_organization.pk", read_only=True)
Expand Down
18 changes: 15 additions & 3 deletions apps/baseline/tests/factories.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,16 @@ class Meta:
]

code = factory.LazyAttributeSequence(lambda o, n: f"{o.country.pk}{n:04d}")
name = factory.LazyAttribute(lambda o: f"{o.code} name")
description = factory.LazyAttribute(lambda o: f"{o.code} description")
name_en = factory.LazyAttribute(lambda o: f"{o.code} name EN")
name_fr = factory.LazyAttribute(lambda o: f"{o.code} name FR")
name_es = factory.LazyAttribute(lambda o: f"{o.code} name ES")
name_pt = factory.LazyAttribute(lambda o: f"{o.code} name PT")
name_ar = factory.LazyAttribute(lambda o: f"{o.code} name AR")
description_en = factory.LazyAttribute(lambda o: f"{o.code} description EN")
description_fr = factory.LazyAttribute(lambda o: f"{o.code} description FR")
description_es = factory.LazyAttribute(lambda o: f"{o.code} description ES")
description_pt = factory.LazyAttribute(lambda o: f"{o.code} description PT")
description_ar = factory.LazyAttribute(lambda o: f"{o.code} description AR")
country = factory.SubFactory(CountryFactory)


Expand All @@ -91,7 +99,11 @@ class Meta:
"source_organization",
]

name = factory.LazyAttribute(lambda lz: f"Baseline {lz.livelihood_zone}")
name_en = factory.LazyAttribute(lambda lz: f"Baseline {lz.livelihood_zone}")
name_fr = factory.LazyAttribute(lambda lz: f"Baseline {lz.livelihood_zone}")
name_es = factory.LazyAttribute(lambda lz: f"Baseline {lz.livelihood_zone}")
name_pt = factory.LazyAttribute(lambda lz: f"Baseline {lz.livelihood_zone}")
name_ar = factory.LazyAttribute(lambda lz: f"Baseline {lz.livelihood_zone}")
livelihood_zone = factory.SubFactory(LivelihoodZoneFactory)
geography = None
main_livelihood_category = factory.SubFactory(LivelihoodCategoryFactory)
Expand Down
Loading

0 comments on commit faa3790

Please sign in to comment.