From 27b16c2212f3e4275523eb1ffddc59835828a0c4 Mon Sep 17 00:00:00 2001 From: James Graham Date: Fri, 19 Mar 2021 15:57:32 +0000 Subject: [PATCH] feat: allow multiple nationalities Resolves #108 --- people/forms.py | 2 +- .../0052_allow_multiple_nationalities.py | 20 +++++++++++++++++++ people/models/person.py | 2 +- people/models/question.py | 7 +++++-- 4 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 people/migrations/0052_allow_multiple_nationalities.py diff --git a/people/forms.py b/people/forms.py index f315a3f..ae0a0e9 100644 --- a/people/forms.py +++ b/people/forms.py @@ -171,7 +171,7 @@ class PersonAnswerSetForm(forms.ModelForm, DynamicAnswerSetBase): 'longitude', ] widgets = { - 'nationality': Select2Widget(), + 'nationality': Select2MultipleWidget(), 'country_of_residence': Select2Widget(), 'organisation_started_date': DatePickerInput(format='%Y-%m-%d'), 'project_started_date': DatePickerInput(format='%Y-%m-%d'), diff --git a/people/migrations/0052_allow_multiple_nationalities.py b/people/migrations/0052_allow_multiple_nationalities.py new file mode 100644 index 0000000..e242bd5 --- /dev/null +++ b/people/migrations/0052_allow_multiple_nationalities.py @@ -0,0 +1,20 @@ +# Generated by Django 2.2.10 on 2021-03-19 15:39 + +from django.db import migrations +import django_countries.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('people', '0051_refactor_hardcoded_questions'), + ] + + operations = [ + migrations.AlterField( + model_name='personanswerset', + name='nationality', + field=django_countries.fields.CountryField(blank=True, default=[], max_length=746, multiple=True), + preserve_default=False, + ), + ] diff --git a/people/models/person.py b/people/models/person.py index fab2333..08c76a8 100644 --- a/people/models/person.py +++ b/people/models/person.py @@ -147,7 +147,7 @@ class PersonAnswerSet(AnswerSet): ################## # Static questions - nationality = CountryField(blank=True, null=True) + nationality = CountryField(multiple=True, blank=True) country_of_residence = CountryField(blank=True, null=True) diff --git a/people/models/question.py b/people/models/question.py index e7a50d6..b143db3 100644 --- a/people/models/question.py +++ b/people/models/question.py @@ -176,8 +176,11 @@ class AnswerSet(models.Model): try: for question in questions: if question.hardcoded_field: - question_answers[question.text] = getattr( - self, question.hardcoded_field) + answer = getattr(self, question.hardcoded_field) + if isinstance(answer, list): + answer = ', '.join(map(str, answer)) + + question_answers[question.text] = answer else: answers = self.question_answers.filter(