Skip to content

Commit

Permalink
FM Settings Question text and translations
Browse files Browse the repository at this point in the history
  • Loading branch information
emaciupe committed Feb 6, 2023
1 parent 7ac93ca commit 36d07d0
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 56 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@

from ordered_model.admin import OrderedModelAdmin

from etools.applications.core.i18n.utils import get_translated_field
from etools.applications.field_monitoring.fm_settings.models import (
Category,
LocationSite,
Expand All @@ -30,14 +29,11 @@ class QuestionOptionsInline(admin.StackedInline):

@admin.register(Question)
class QuestionAdmin(admin.ModelAdmin):
list_display = ('get_text', 'level', 'methods_list', 'is_hact')
list_display = ('text', 'level', 'methods_list', 'is_hact')
search_fields = ('text',)
list_filter = ('level', 'methods', 'sections', 'is_hact')
inlines = (QuestionOptionsInline,)

def get_text(self, obj):
return get_translated_field(obj, 'text')

def methods_list(self, obj):
return [str(m) for m in obj.methods.all()]
methods_list.short_description = _('Methods')
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 3.2.6 on 2023-02-06 12:20

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('field_monitoring_settings', '0009_merge_0008_alter_option_label_0008_auto_20210108_1634'),
]

operations = [
migrations.AddField(
model_name='question',
name='translations',
field=models.JSONField(default=dict, verbose_name='Translations'),
),
]

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@
from unicef_attachments.models import Attachment
from unicef_djangolib.fields import CodedGenericRelation

from etools.applications.core.i18n.fields import TranslatedTextField
from etools.applications.core.i18n.utils import get_default_translated, get_translated_field
from etools.applications.locations.models import Location
from etools.applications.partners.models import PartnerOrganization
from etools.applications.reports.models import Result, Section
Expand Down Expand Up @@ -105,7 +103,9 @@ class Question(models.Model):
methods = models.ManyToManyField(Method, verbose_name=_('Methods'))
category = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name=_('Category'))
sections = models.ManyToManyField(Section, verbose_name=_('Sections'), blank=True)
text = TranslatedTextField(verbose_name=_('Question Text'), default=get_default_translated)
text = models.TextField(verbose_name=_('Question Text'))
translations = models.JSONField(verbose_name=_('Translations'), default=dict)

is_hact = models.BooleanField(default=False, verbose_name=_('Count as HACT'))
is_custom = models.BooleanField(default=False, verbose_name=_('Is Custom'))
is_active = models.BooleanField(default=True, verbose_name=_('Is Active'))
Expand Down Expand Up @@ -142,7 +142,7 @@ def template(self, value):
self._template = value

def __str__(self):
return get_translated_field(self, 'text')
return self.text


class Option(models.Model):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
from unicef_snapshot.serializers import SnapshotModelSerializer

from etools.applications.action_points.serializers import HistorySerializer
from etools.applications.core.i18n.utils import get_language_code, get_translated_field
from etools.applications.core.i18n.mixins import TranslationFieldsMixin
from etools.applications.field_monitoring.fm_settings.models import (
Category,
LocationSite,
Expand Down Expand Up @@ -60,8 +60,9 @@ class Meta:
fields = ('id', 'name')


class QuestionLightSerializer(serializers.ModelSerializer):
text = serializers.CharField()
class QuestionLightSerializer(TranslationFieldsMixin, serializers.ModelSerializer):
# translatable_fields marks which fields have entries in translations JSONField
translatable_fields = ('text', )

class Meta:
model = Question
Expand All @@ -71,11 +72,6 @@ class Meta:
'is_hact', 'is_active', 'is_custom'
)

def to_representation(self, instance):
data = super().to_representation(instance)
data['text'] = get_translated_field(instance, 'text')
return data


class QuestionSerializer(QuestionLightSerializer):
options = OptionSerializer(many=True, required=False)
Expand All @@ -99,10 +95,8 @@ def create(self, validated_data):
validated_data['is_custom'] = True
self.check_hact_questions(validated_data)
options = validated_data.pop('options', None)
text = validated_data.pop('text', None)
instance = super().create(validated_data)
self.set_options(instance, options)
self.set_text(instance, text)
return instance

def update(self, instance, validated_data):
Expand All @@ -113,17 +107,10 @@ def update(self, instance, validated_data):

self.check_hact_questions(validated_data, instance)
options = validated_data.pop('options', None)
text = validated_data.pop('text', None)
instance = super().update(instance, validated_data)
self.set_options(instance, options)
self.set_text(instance, text)
return instance

def set_text(self, instance, text):
language = get_language_code()
instance.text[language] = text
instance.save(update_fields=['text'])

def set_options(self, instance, options):
if options is None:
return
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,8 @@ class QuestionFactory(factory.django.DjangoModelFactory):
is_custom = True
choices_size = factory.Maybe(LazyAttribute(lambda self: self.answer_type == Question.ANSWER_TYPES.likert_scale), 3)
level = fuzzy.FuzzyChoice(dict(Question.LEVELS).keys())
text = factory.Dict(get_default_translated())
text = fuzzy.FuzzyText()
translations = factory.Dict(get_default_translated('text'))

class Meta:
model = Question
Expand Down

0 comments on commit 36d07d0

Please sign in to comment.