def to_representation(self, instance): data = super(AmbulanceSerializer, self).to_representation(instance) data["primary_district_obj"] = (DistrictSerializer().to_representation( instance.primary_district_obj) if instance.primary_district_obj else None) data["secondary_district_obj"] = ( DistrictSerializer().to_representation( instance.secondary_district_obj) if instance.secondary_district_obj else None) data["third_district_obj"] = (DistrictSerializer().to_representation( instance.third_district_obj) if instance.third_district_obj else None) return data
class AmbulanceSerializer(serializers.ModelSerializer): drivers = serializers.ListSerializer(child=AmbulanceDriverSerializer()) primary_district_object = DistrictSerializer(read_only=True, source="primary_district") secondary_district_object = DistrictSerializer(read_only=True, source="secondary_district") third_district_object = DistrictSerializer(read_only=True, source="third_district") class Meta: model = Ambulance read_only_fields = ( "primary_district_object", "secondary_district_object", "third_district_object", ) exclude = ("created_by", ) def validate(self, obj): validated = super().validate(obj) if not validated.get("price_per_km") and not validated.get( "has_free_service"): raise ValidationError( "The ambulance must provide a price or be marked as free") return validated def validate_vehicle_number(self, value): """ Converts vehicle number to upper case before passing it to the database\ Earlier regular expression used only permitted upper case values. """ return value.upper() def create(self, validated_data): with transaction.atomic(): drivers = validated_data.pop("drivers", []) validated_data.pop("created_by", None) ambulance = super(AmbulanceSerializer, self).create(validated_data) for d in drivers: d["ambulance"] = ambulance AmbulanceDriverSerializer().create(d) return ambulance def update(self, instance, validated_data): validated_data.pop("drivers", []) ambulance = super(AmbulanceSerializer, self).update(instance, validated_data) return ambulance
class FacilityLocalGovtBodySerializer(serializers.ModelSerializer): local_body = LocalBodySerializer() district = DistrictSerializer() class Meta: model = FacilityLocalGovtBody fields = "__all__"
class PatientListSerializer(serializers.ModelSerializer): id = serializers.CharField(source="external_id", read_only=True) facility = serializers.UUIDField(source="facility.external_id", allow_null=True, read_only=True) facility_object = FacilityBasicInfoSerializer(source="facility", read_only=True) ward_object = WardSerializer(source="ward", read_only=True) local_body_object = LocalBodySerializer(source="local_body", read_only=True) district_object = DistrictSerializer(source="district", read_only=True) state_object = StateSerializer(source="state", read_only=True) blood_group = ChoiceField(choices=BLOOD_GROUP_CHOICES, required=True) disease_status = ChoiceField(choices=DISEASE_STATUS_CHOICES, default=DiseaseStatusEnum.SUSPECTED.value) source = ChoiceField(choices=PatientRegistration.SourceChoices) class Meta: model = PatientRegistration exclude = ( "created_by", "deleted", "ongoing_medication", "patient_search_id", "year_of_birth", "meta_info", "countries_travelled_old", "allergies", "external_id", ) read_only = TIMESTAMP_FIELDS
class FacilityBasicInfoSerializer(serializers.ModelSerializer): id = serializers.UUIDField(source="external_id", read_only=True) ward_object = WardSerializer(source="ward", read_only=True) local_body_object = LocalBodySerializer(source="local_body", read_only=True) district_object = DistrictSerializer(source="district", read_only=True) state_object = StateSerializer(source="state", read_only=True) facility_type = serializers.SerializerMethodField() def get_facility_type(self, facility): return { "id": facility.facility_type, "name": facility.get_facility_type_display() } class Meta: model = Facility fields = ( "id", "name", "local_body", "district", "state", "ward_object", "local_body_object", "district_object", "state_object", "facility_type", )
class UserSerializer(SignUpSerializer): user_type = ChoiceField(choices=User.TYPE_CHOICES, read_only=True) is_superuser = serializers.BooleanField(read_only=True) local_body_object = LocalBodySerializer(source="local_body", read_only=True) district_object = DistrictSerializer(source="district", read_only=True) state_object = StateSerializer(source="state", read_only=True) class Meta: model = User fields = ( "id", "username", "first_name", "last_name", "email", "user_type", "local_body", "district", "state", "phone_number", "gender", "age", "is_superuser", "verified", "local_body_object", "district_object", "state_object", ) read_only_fields = ("is_superuser", "verified", "user_type", "ward", "local_body", "district", "state") extra_kwargs = {"url": {"lookup_field": "username"}}
class FacilityBasicInfoSerializer(serializers.ModelSerializer): local_body_object = LocalBodySerializer(source="local_body", read_only=True) district_object = DistrictSerializer(source="district", read_only=True) state_object = StateSerializer(source="state", read_only=True) facility_type = serializers.SerializerMethodField() def get_facility_type(self, facility): return { "id": facility.facility_type, "name": FACILITY_TYPES[facility.facility_type - 1][1] } class Meta: model = Facility fields = ( "id", "name", "local_body", "district", "state", "local_body_object", "district_object", "state_object", "facility_type", )
class FacilitySerializer(serializers.ModelSerializer): """Serializer for facility.models.Facility.""" facility_type = ChoiceField(choices=FACILITY_TYPES) # A valid location => { # "latitude": 49.8782482189424, # "longitude": 24.452545489 # } location = PointField(required=False) local_body_object = LocalBodySerializer(source="local_body", read_only=True) district_object = DistrictSerializer(source="district", read_only=True) state_object = StateSerializer(source="state", read_only=True) class Meta: model = Facility fields = [ "id", "name", "local_body", "district", "state", "facility_type", "address", "location", "oxygen_capacity", "phone_number", "local_body_object", "district_object", "state_object", ]
class UserListSerializer(serializers.ModelSerializer): local_body_object = LocalBodySerializer(source="local_body", read_only=True) district_object = DistrictSerializer(source="district", read_only=True) state_object = StateSerializer(source="state", read_only=True) class Meta: model = User fields = ("id", "first_name", "last_name", "local_body_object", "district_object", "state_object")
class PatientListSerializer(serializers.ModelSerializer): local_body_object = LocalBodySerializer(source="local_body", read_only=True) district_object = DistrictSerializer(source="district", read_only=True) state_object = StateSerializer(source="state", read_only=True) class Meta: model = PatientRegistration exclude = ("created_by", "deleted")
class AmbulanceSerializer(serializers.ModelSerializer): drivers = serializers.ListSerializer(child=AmbulanceDriverSerializer()) primary_district_object = DistrictSerializer(read_only=True, source="primary_district") secondary_district_object = DistrictSerializer(read_only=True, source="secondary_district") third_district_object = DistrictSerializer(read_only=True, source="third_district") class Meta: model = Ambulance read_only_fields = ( "primary_district_object", "secondary_district_object", "third_district_object", ) exclude = ("created_by", ) def validate(self, obj): validated = super().validate(obj) if not validated.get("price_per_km") and not validated.get( "has_free_service"): raise ValidationError( "The ambulance must provide a price or be marked as free") return validated def create(self, validated_data): with transaction.atomic(): drivers = validated_data.pop("drivers", []) validated_data.pop("created_by", None) ambulance = super(AmbulanceSerializer, self).create(validated_data) for d in drivers: d["ambulance"] = ambulance AmbulanceDriverSerializer().create(d) return ambulance def update(self, instance, validated_data): validated_data.pop("drivers", []) ambulance = super(AmbulanceSerializer, self).update(instance, validated_data) return ambulance
class UserListSerializer(serializers.ModelSerializer): local_body_object = LocalBodySerializer(source="local_body", read_only=True) district_object = DistrictSerializer(source="district", read_only=True) state_object = StateSerializer(source="state", read_only=True) user_type = ChoiceField(choices=User.TYPE_CHOICES, read_only=True) class Meta: model = User fields = ("id", "first_name", "last_name", "local_body_object", "district_object", "state_object", "user_type")
class PatientListSerializer(serializers.ModelSerializer): facility = serializers.IntegerField(source="facility_id", allow_null=True, read_only=True) local_body_object = LocalBodySerializer(source="local_body", read_only=True) district_object = DistrictSerializer(source="district", read_only=True) state_object = StateSerializer(source="state", read_only=True) class Meta: model = PatientRegistration exclude = ("created_by", "deleted")
class PatientListSerializer(serializers.ModelSerializer): facility = serializers.IntegerField(source="facility_id", allow_null=True, read_only=True) facility_object = FacilityBasicInfoSerializer(source="facility", read_only=True) local_body_object = LocalBodySerializer(source="local_body", read_only=True) district_object = DistrictSerializer(source="district", read_only=True) state_object = StateSerializer(source="state", read_only=True) disease_status = ChoiceField(choices=DISEASE_STATUS_CHOICES, default=DiseaseStatusEnum.SUSPECTED.value) source = ChoiceField(choices=PatientRegistration.SourceChoices) class Meta: model = PatientRegistration exclude = ("created_by", "deleted", "ongoing_medication", "patient_search_id", "year_of_birth", "meta_info") read_only = TIMESTAMP_FIELDS
class PatientListSerializer(serializers.ModelSerializer): local_body_object = LocalBodySerializer(source="local_body", read_only=True) district_object = DistrictSerializer(source="district", read_only=True) state_object = StateSerializer(source="state", read_only=True) def to_representation(self, obj): repr = super().to_representation(obj) if not self.context["request"].user.is_superuser: repr.pop("name") repr.pop("phone_number") return repr class Meta: model = PatientRegistration exclude = ("created_by", "deleted")
def districts(self, *args, **kwargs): division = self.get_object() serializer = DistrictSerializer( division.districts.all().order_by("name"), many=True) return Response(data=serializer.data)
def districts(self, *args, **kwargs): state = self.get_object() serializer = DistrictSerializer( state.district_set.all().order_by("name"), many=True) return Response(data=serializer.data)
class PatientExternalTestSerializer(serializers.ModelSerializer): ward_object = WardSerializer(source="ward", read_only=True) local_body_object = LocalBodySerializer(source="local_body", read_only=True) district_object = DistrictSerializer(source="district", read_only=True) sample_collection_date = serializers.DateField(input_formats=["%Y-%m-%d"], required=False) result_date = serializers.DateField(input_formats=["%Y-%m-%d"], required=False) def validate_empty_values(self, data, *args, **kwargs): # if "is_repeat" in data: # is_repeat = data["is_repeat"] # if is_repeat.lower() == "yes": # data["is_repeat"] = True # else: # data["is_repeat"] = False district_obj = None if "district" in data: district = data["district"] district_obj = District.objects.filter( name__icontains=district).first() if district_obj: data["district"] = district_obj.id else: raise ValidationError( {"district": ["District Does not Exist"]}) else: raise ValidationError( {"district": ["District Not Present in Data"]}) local_body_obj = None if "local_body" in data and district_obj: if not data["local_body"]: raise ValidationError( {"local_body": ["Local Body Cannot Be Empty"]}) local_body = data["local_body"] local_body_obj = LocalBody.objects.filter( name__icontains=local_body, district=district_obj).first() if local_body_obj: data["local_body"] = local_body_obj.id else: raise ValidationError( {"local_body": ["Local Body Does not Exist"]}) else: raise ValidationError( {"local_body": ["Local Body Not Present in Data"]}) if "ward" in data and local_body_obj: if data["ward"]: ward_obj = Ward.objects.filter( number=data["ward"], local_body=local_body_obj).first() if ward_obj: data["ward"] = ward_obj.id else: raise ValidationError({"ward": ["Ward Does not Exist"]}) return super().validate_empty_values(data, *args, **kwargs) # def validate_ward(self, value): # print(value) class Meta: model = PatientExternalTest fields = "__all__"