fix: update export views to match model changes

Resolves #72
This commit is contained in:
James Graham
2021-02-08 14:58:32 +00:00
parent a141b93644
commit c102cbf091
5 changed files with 66 additions and 20 deletions

View File

@@ -27,7 +27,7 @@ class ActivityMediumSerializer(serializers.ModelSerializer):
class ActivitySeriesSerializer(serializers.ModelSerializer): class ActivitySeriesSerializer(serializers.ModelSerializer):
type = ActivityTypeSerializer() type = ActivityTypeSerializer()
medium = ActivityMediumSerializer() medium = ActivityMediumSerializer()
class Meta: class Meta:
model = models.ActivitySeries model = models.ActivitySeries
fields = [ fields = [
@@ -52,8 +52,8 @@ class ActivitySerializer(base.FlattenedModelSerializer):
'type', 'type',
'medium', 'medium',
] ]
class SimpleActivitySerializer(serializers.ModelSerializer): class SimpleActivitySerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = models.Activity model = models.Activity
@@ -65,8 +65,8 @@ class SimpleActivitySerializer(serializers.ModelSerializer):
class ActivityAttendanceSerializer(base.FlattenedModelSerializer): class ActivityAttendanceSerializer(base.FlattenedModelSerializer):
activity = SimpleActivitySerializer() activity = SimpleActivitySerializer()
person = people_serializers.SimplePersonSerializer() person = people_serializers.PersonSerializer()
class Meta: class Meta:
model = models.Activity.attendance_list.through model = models.Activity.attendance_list.through
fields = [ fields = [

View File

@@ -7,16 +7,6 @@ from people import models
from . import base from . import base
class SimplePersonSerializer(serializers.ModelSerializer):
class Meta:
model = models.Person
fields = [
'id',
# Name is excluded from exports
# See https://github.com/Southampton-RSG/breccia-mapper/issues/35
]
class PersonSerializer(base.FlattenedModelSerializer): class PersonSerializer(base.FlattenedModelSerializer):
class Meta: class Meta:
model = models.Person model = models.Person
@@ -24,18 +14,57 @@ class PersonSerializer(base.FlattenedModelSerializer):
'id', 'id',
# Name is excluded from exports # Name is excluded from exports
# See https://github.com/Southampton-RSG/breccia-mapper/issues/35 # See https://github.com/Southampton-RSG/breccia-mapper/issues/35
'gender', ]
'age_group',
class PersonAnswerSetSerializer(base.FlattenedModelSerializer):
person = PersonSerializer()
class Meta:
model = models.PersonAnswerSet
fields = [
'id',
'person',
'timestamp',
'replaced_timestamp',
'nationality', 'nationality',
'country_of_residence', 'country_of_residence',
'organisation', 'organisation',
'organisation_started_date', 'organisation_started_date',
'job_title',
'disciplines',
'themes',
'latitude',
'longitude',
] ]
@property
def column_headers(self) -> typing.List[str]:
headers = super().column_headers
# Add questions to columns
for question in models.PersonQuestion.objects.all():
headers.append(underscore(question.slug))
return headers
def to_representation(self, instance):
rep = super().to_representation(instance)
try:
# Add relationship question answers to data
for answer in instance.question_answers.all():
rep[underscore(answer.question.slug)] = underscore(answer.slug)
except AttributeError:
pass
return rep
class RelationshipSerializer(base.FlattenedModelSerializer): class RelationshipSerializer(base.FlattenedModelSerializer):
source = SimplePersonSerializer() source = PersonSerializer()
target = SimplePersonSerializer() target = PersonSerializer()
class Meta: class Meta:
model = models.Relationship model = models.Relationship

View File

@@ -30,6 +30,15 @@
</td> </td>
</tr> </tr>
<tr>
<td>Person Answer Sets</td>
<td></td>
<td>
<a class="btn btn-info"
href="{% url 'export:person-answer-set' %}">Export</a>
</td>
</tr>
<tr> <tr>
<td>Relationships</td> <td>Relationships</td>
<td></td> <td></td>

View File

@@ -14,10 +14,14 @@ urlpatterns = [
views.people.PersonExportView.as_view(), views.people.PersonExportView.as_view(),
name='person'), name='person'),
path('export/person-answer-sets',
views.people.PersonAnswerSetExportView.as_view(),
name='person-answer-set'),
path('export/relationships', path('export/relationships',
views.people.RelationshipExportView.as_view(), views.people.RelationshipExportView.as_view(),
name='relationship'), name='relationship'),
path('export/relationship-answer-sets', path('export/relationship-answer-sets',
views.people.RelationshipAnswerSetExportView.as_view(), views.people.RelationshipAnswerSetExportView.as_view(),
name='relationship-answer-set'), name='relationship-answer-set'),

View File

@@ -8,6 +8,10 @@ class PersonExportView(base.CsvExportView):
model = models.person.Person model = models.person.Person
serializer_class = serializers.people.PersonSerializer serializer_class = serializers.people.PersonSerializer
class PersonAnswerSetExportView(base.CsvExportView):
model = models.person.PersonAnswerSet
serializer_class = serializers.people.PersonAnswerSetSerializer
class RelationshipExportView(base.CsvExportView): class RelationshipExportView(base.CsvExportView):
model = models.relationship.Relationship model = models.relationship.Relationship