Source code for akvo.rest.serializers.project_location

# -*- coding: utf-8 -*-
"""Akvo RSR is covered by the GNU Affero General Public License.
See more details in the license.txt file located at the root folder of the Akvo RSR module.
For additional details on the GNU license please see < http://www.gnu.org/licenses/agpl.html >.
"""

from rest_framework import serializers
from akvo.rsr.models import ProjectLocation, AdministrativeLocation, Country
from ..fields import Base64ImageField
from .country import CountrySerializer
from .rsr_serializer import BaseRSRSerializer


[docs]class ProjectLocationRawSerializer(BaseRSRSerializer):
[docs] class Meta: model = ProjectLocation fields = '__all__'
[docs]class AdministrativeLocationSerializer(BaseRSRSerializer): location_unicode = serializers.ReadOnlyField(source='location.__str__') vocabulary_label = serializers.ReadOnlyField(source='iati_vocabulary_unicode')
[docs] class Meta: model = AdministrativeLocation fields = '__all__'
[docs]class ProjectLocationSerializer(ProjectLocationRawSerializer): country_label = serializers.ReadOnlyField(source='iati_country_unicode') vocabulary_label = serializers.ReadOnlyField(source='iati_vocabulary_unicode') exactness_label = serializers.ReadOnlyField(source='iati_exactness_unicode') reach_label = serializers.ReadOnlyField(source='iati_reach_unicode') class_label = serializers.ReadOnlyField(source='iati_class_unicode') feature_designation_label = serializers.ReadOnlyField(source='iati_designation_unicode') administratives = AdministrativeLocationSerializer(many=True, read_only=True) country_iso_code = serializers.CharField(source='country.iso_code', default=None)
[docs] def create(self, validated_data): iso_code = validated_data.pop('country', {}).pop('iso_code', '') location = super(ProjectLocationSerializer, self).create(validated_data) if iso_code: try: country = Country.objects.get(iso_code__iexact=iso_code) except Country.DoesNotExist: pass else: location.country = country location.save(update_fields=['country']) return location
[docs] def update(self, instance, validated_data): iso_code = validated_data.pop('country', {}).pop('iso_code', '') if iso_code: try: country = Country.objects.get(iso_code__iexact=iso_code) except Country.DoesNotExist: pass else: instance.country = country return super(ProjectLocationSerializer, self).update(instance, validated_data)
[docs]class ProjectLocationExtraSerializer(ProjectLocationRawSerializer): country = CountrySerializer()
[docs]class MapProjectSerializer(serializers.Serializer): """To serialize the project field of the project map resource.""" id = serializers.IntegerField() title = serializers.CharField() current_image = Base64ImageField(required=False, allow_empty_file=True, allow_null=True)
[docs]class ProjectLocationCountryNameSerializer(serializers.Serializer): country = serializers.StringRelatedField(read_only=True) iso_code = serializers.StringRelatedField(source='country.iso_code', read_only=True)
[docs] class Meta: fields = ('country', 'iso_code')