right-tree/backend/right_tree/api/serializers.py
Matthew Northcott 3f9f816a7e [#40] Bulk PDF export
- backend changes
2023-02-22 15:08:30 +13:00

112 lines
3.8 KiB
Python

from rest_framework import serializers, exceptions
from right_tree.api.models import *
class ToleranceLevelSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = ToleranceLevel
fields = ['level']
class EcologicalRegionSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = EcologicalRegion
fields = ['name']
class EcologicalDistrictLayerSerializer(serializers.HyperlinkedModelSerializer):
ecological_district = serializers.CharField(
max_length=50, source='ecologic_1')
ecological_region = serializers.CharField(
max_length=50, source='ecologic_2')
class Meta:
model = EcologicalDistrictLayer
fields = ['ecological_district', 'ecological_region']
class SoilOrderSerializer(serializers.HyperlinkedModelSerializer):
soil_name = serializers.CharField(max_length=50, source='name')
soil_code = serializers.CharField(max_length=1, source='code')
class Meta:
model = SoilOrder
fields = ['soil_name', 'soil_code']
class SoilVariantSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = SoilVariant
fields = ['name']
class HabitatImageSerializer(serializers.HyperlinkedModelSerializer):
id = serializers.ReadOnlyField()
class Meta:
model = HabitatImage
fields = ['id', 'name', 'image_filename']
class HabitatSerializer(serializers.HyperlinkedModelSerializer):
id = serializers.ReadOnlyField()
images = HabitatImageSerializer(many=True)
class Meta:
model = Habitat
fields = ['id', 'name', 'images']
class ZoneSerializer(serializers.HyperlinkedModelSerializer):
id = serializers.ReadOnlyField()
habitat = HabitatSerializer()
redirect_habitat = HabitatSerializer()
class Meta:
model = Zone
fields = ['id', 'name', 'variant',
'refined_variant', 'habitat', 'related_svg_segment', 'redirect_habitat', 'ignore_soil_order_filter', 'ignore_location_filter', 'tooltip_display_text']
class LocationDetailsSerializer(serializers.Serializer):
ecologic_1 = serializers.CharField(max_length=50)
ecologic_2 = serializers.CharField(max_length=50)
code = serializers.CharField(max_length=1)
name = serializers.CharField(max_length=50)
class PlantSerializer(serializers.HyperlinkedModelSerializer):
id = serializers.ReadOnlyField()
water_tolerance = ToleranceLevelSerializer()
drought_tolerance = ToleranceLevelSerializer()
frost_tolerance = ToleranceLevelSerializer()
salinity_tolerance = ToleranceLevelSerializer()
ecological_regions = EcologicalRegionSerializer(many=True, read_only=True)
soil_order = SoilOrderSerializer(many=True, read_only=True)
soil_variants = SoilVariantSerializer(many=True, read_only=True)
zones = ZoneSerializer(many=True, read_only=True)
display_name = serializers.CharField(max_length=300)
display_growth_form = serializers.CharField(max_length=300)
moisture_preferences = serializers.CharField(max_length=50)
plant_tolerances = serializers.CharField(max_length=50)
ecosystem_services = serializers.CharField(max_length=200)
carbon_sequestration = serializers.CharField(max_length=50)
class Meta:
model = Plant
fields = '__all__'
class AddressSerializer(serializers.Serializer):
full_address = serializers.CharField(max_length=500)
class QuestionnaireSerializer(serializers.ModelSerializer):
soil_variant = serializers.CharField(max_length=10)
class Meta:
model = Questionnaire
fields = '__all__'
def validate_soil_variant(self, value):
try:
return SoilVariant.objects.get(name__startswith=value)
except SoilVariant.DoesNotExist as e:
raise exceptions.ValidationError(e)