Beispiel #1
0
class AshGeoJsonSerializer(GeoFeatureModelSerializer):

    location = GeometrySerializerMethodField()
    volcano = VolcanoSerializer(many=False, read_only=True, write_only=False)

    def get_location(self, obj):
        return obj.volcano.location

    class Meta:
        model = Ash
        geo_field = 'location'
        id = 'id',
        fields = (
            'id',
            'event_id_formatted',
            'volcano',
            'hazard_file',
            'impact_files',
            'event_time',
            'event_time_zone_offset',
            'event_time_zone_string',
            'alert_level',
            'task_status',
            'eruption_height',
        )
Beispiel #2
0
class OrganisationGeoSerializer(GeoFeatureModelSerializer):

    geography_model = GeometrySerializerMethodField()

    def get_geography_model(self, obj):
        return obj.geography.geography.simplify(0.0009)

    class Meta:
        model = Organisation
        extra_kwargs = {
            'url': {
                'view_name': 'organisation-geo',
                'lookup_field': 'pk'
            }
        }

        geo_field = 'geography_model'

        fields = (
            'official_identifier',
            'organisation_type',
            'organisation_subtype',
            'official_name',
            'common_name',
            'gss',
            'slug',
            'territory_code',
            'election_name'
        )
class GeoOccurrenceSerializer(GeoFeatureModelSerializer):

    resource_uri = serializers.HyperlinkedIdentityField(
        view_name='api:occurrence-detail', read_only=True)

    # a field which contains a geometry value and can be used as geo_field
    location = GeometrySerializerMethodField()

    class Meta:
        model = Occurrence
        geo_field = 'location'
        id_field = False
        fields = (
            'id',
            'resource_uri',
            'title',
            'description',
            'start',
            'end',
            'location',
        )

    def get_location(self, obj):
        try:
            # Get the location from relation
            return obj.location.location
        except AttributeError:
            return None
Beispiel #4
0
class CountrySerializer(GeoFeatureModelSerializer):
    current_total = serializers.SerializerMethodField("get_current_total")
    location = GeometrySerializerMethodField(
    )  # allows to compute value during serialization

    def get_current_total(
        self, country
    ):  # SerializerMethodField automatically infers callback from variable name
        try:
            items = Confirmed.objects.filter(country=country.pk).latest('date')
        except Confirmed.DoesNotExist:
            items = Confirmed(country=country, date=None, total=None)
        serializer = CovidConfirmedSerializer(instance=items)
        return serializer.data

    def get_location(self, obj):
        return Point(obj.lon, obj.lat)

    class Meta:
        model = WorldBorder
        geo_field = 'location'
        fields = (
            'name',
            'pop2005',
            'current_total',
        )
Beispiel #5
0
class BoundaryGeojsonSerializer(GeoFeatureModelSerializer):
    geometry = GeometrySerializerMethodField()

    class Meta:
        model = Boundary
        geo_field = 'geometry'
        fields = []

    def get_geometry(self, obj):
        return obj.geometry
Beispiel #6
0
class UserBondarySerializer(GeoFeatureModelSerializer):
    geometry = GeometrySerializerMethodField()

    class Meta:
        model = UserBoundary
        geo_field = 'geometry'
        fields = ['id', 'name']

    def get_geometry(self, obj):
        return obj.geometry
Beispiel #7
0
class placeSerializer(GeoFeatureModelSerializer):

    point = GeometrySerializerMethodField()

    def get_point(self, obj):
        return Point(obj.lat, obj.lon)

    class Meta:
        model = place
        geo_field = "point"
        fields = ('city', 'district', 'street', 'house')
Beispiel #8
0
class AssetGeoJsonSerializer(GeoFeatureModelSerializer):
    geom = GeometrySerializerMethodField()
    asset_types = AssetTypeSerializer(many=True)

    def get_geom(self, obj):
        return obj.location.geom

    class Meta:
        model = Asset
        geo_field = 'geom'
        fields = ['name', 'asset_types']
Beispiel #9
0
class ClusterSerializer(GeoFeatureModelSerializer):
    """A class to serialize locations as GeoJSON compatible data."""

    point = GeometrySerializerMethodField()
    point_geohash = CharField()
    cluster_count = IntegerField()

    def get_point(self, obj):
        """Parse a geohashed point to Geometry."""
        y, x = geohash.decode(obj['point_geohash'])
        return Point(x, y)
Beispiel #10
0
class DeliverySerializer(geo_serializers.GeoFeatureModelSerializer):
    def get_path(self, obj):
        print obj
        return LineString(obj.destination, obj.origin)

    path = GeometrySerializerMethodField()

    class Meta:
        model = Delivery
        geo_field = "path"
        fields = ("by", "date")
Beispiel #11
0
class kazpostSerializer(GeoFeatureModelSerializer):

    point = GeometrySerializerMethodField()

    def get_point(self, obj):
        return Point(obj.lat, obj.lon)

    class Meta:
        model = kazpost
        geo_field = "point"
        fields = ('region', 'area', 'locality', 'district', 'street', 'house')
Beispiel #12
0
class LocationSerializer(GeoFeatureModelSerializer):
    """ A class to serialize locations as GeoJSON compatible data """

    point = GeometrySerializerMethodField()

    def get_point(self, obj):
        return obj.get_point

    class Meta:
        model = Location
        geo_field = "point"
        fields = ('id', 'street', 'city', 'state')
class BioCollectionGeojsonSerializer(GeoFeatureModelSerializer):
    geometry = GeometrySerializerMethodField()
    location_site = serializers.SerializerMethodField()
    species_name = serializers.SerializerMethodField()
    notes = serializers.SerializerMethodField()
    category = serializers.SerializerMethodField()
    date = serializers.SerializerMethodField()
    collector = serializers.SerializerMethodField()

    def get_location_site(self, obj):
        if obj.site:
            return obj.site.name
        return ''

    def get_species_name(self, obj):
        return obj.original_species_name

    def get_notes(self, obj):
        return obj.notes

    def get_category(self, obj):
        return obj.category

    def get_date(self, obj):
        if obj.collection_date:
            return obj.collection_date.strftime('%Y-%m-%d')

    def get_collector(self, obj):
        return obj.collector

    def get_geometry(self, obj):
        if obj.site:
            return obj.site.get_geometry()
        return None

    class Meta:
        model = BiologicalCollectionRecord
        geo_field = 'geometry'
        fields = [
            'location_site', 'species_name', 'notes', 'category', 'date',
            'collector'
        ]

    def to_representation(self, instance):
        result = super(BioCollectionGeojsonSerializer,
                       self).to_representation(instance)
        try:
            taxonomy = TaxonExportSerializer(instance.taxonomy).data
            result['properties'].update(taxonomy)
        except KeyError:
            pass
        return result
Beispiel #14
0
class OrganisationGeoSerializer(GeoFeatureModelSerializer):

    geography_model = GeometrySerializerMethodField()
    url = OrganisationHyperlinkedIdentityField(
        view_name="api:organisation-geo", read_only=True)

    def get_geography_model(self, obj):
        return obj.geographies.latest().geography

    class Meta:
        model = Organisation
        geo_field = "geography_model"
        fields = org_fields
Beispiel #15
0
class ParkingAreaSerializer(GeoFeatureModelSerializer):
    wgs84_areas = GeometrySerializerMethodField()

    def get_wgs84_areas(self, area):
        return area.geom.transform(4326, clone=True)

    class Meta:
        model = ParkingArea
        geo_field = 'wgs84_areas'
        fields = (
            'id',
            'capacity_estimate',
        )
Beispiel #16
0
class ElectionGeoSerializer(GeoFeatureModelSerializer, BaseElectionSerializer):
    geography_model = GeometrySerializerMethodField()

    def get_geography_model(self, obj):
        if obj.geography is None:
            return None
        return obj.geography.geography

    class Meta:
        model = Election
        extra_kwargs = {"url": {"view_name": "election-geo", "lookup_field": "pk"}}

        geo_field = "geography_model"

        fields = election_fields
        depth = 1
Beispiel #17
0
class ConferenceGeoSerializer(GeoFeatureModelSerializer):
    name = serializers.SerializerMethodField('is_named_bar')

    def is_named_bar(self, available_layer):
        return available_layer.__unicode__()

    geometry = GeometrySerializerMethodField()

    def get_geometry(self, obj):
        return None

    class Meta:
        model = Conference
        geo_field = 'location'
        exclude = []

    def to_representation(self, instance):
        result = super(ConferenceGeoSerializer, self).to_representation(instance)
        return result
Beispiel #18
0
class ElectionGeoSerializer(GeoFeatureModelSerializer, BaseElectionSerializer):
    geography_model = GeometrySerializerMethodField()

    def get_geography_model(self, obj):
        if obj.geography is None:
            return None
        return obj.geography.geography

    class Meta:
        model = Election
        extra_kwargs = {
            'url': {
                'view_name': 'election-geo',
                'lookup_field': 'pk'
            }
        }

        geo_field = 'geography_model'

        fields = election_fields
        depth = 1
Beispiel #19
0
class PendingReviewGeoSerializer(GeoFeatureModelSerializer):
    geom = GeometrySerializerMethodField()
    centroid = SerializerMethodField()
    attributes = SerializerMethodField()
    osm_id = SerializerMethodField()
    osm_type = SerializerMethodField()
    reason = SerializerMethodField()

    class Meta:
        model = PendingReview
        geo_field = 'geom'
        fields = ['centroid', 'attributes', 'osm_id', 'osm_type', 'reason']

    def get_payload(self, obj):
        payload = ast.literal_eval(obj.payload)
        payload['type'] = 'node'
        return payload

    def get_geom(self, obj):
        payload = self.get_payload(obj)
        return Point(payload.get('lon', None), payload.get('lat', None))

    def get_centroid(self, obj):
        return json.loads(self.get_geom(obj).geojson)

    def get_attributes(self, obj):
        payload = self.get_payload(obj)
        return payload.get('tag', {})

    def get_osm_id(self, obj):
        payload = self.get_payload(obj)
        return payload.get('id', None)

    def get_osm_type(self, obj):
        payload = self.get_payload(obj)
        return payload.get('type', 'node')

    def get_reason(self, obj):
        return obj.reason
Beispiel #20
0
class ShellfishAreaListSerializer(GeoFeatureModelSerializer):
    simplified_geom = GeometrySerializerMethodField()

    class Meta:
        model = ShellfishArea
        geo_field = "simplified_geom"
        fields = [
            "id",
            "name",
            "state",
            "acres",
            "area_description",
            "geom_center_point",
            "simplified_geom",
        ]

    def get_simplified_geom(self, obj):
        # Returns a new GEOSGeometry, simplified to the specified tolerance
        # using the Douglas-Peucker algorithm. A higher tolerance value implies
        # fewer points in the output. If no tolerance is provided, it
        # defaults to 0.
        return obj.geom.simplify(tolerance=0.001, preserve_topology=True)
Beispiel #21
0
class AshGeoJsonSerializer(GeoFeatureModelSerializer):

    location = GeometrySerializerMethodField()
    volcano = VolcanoSerializer(many=False, read_only=True, write_only=False)

    def get_location(self, obj):
        return obj.volcano.location

    def get_event_id_formatted(self, serializer_field, obj):
        """
        :param serializer_field:
        :type serializer_field: CustomSerializerMethodField
        :param obj:
        :type obj: Ash
        :return:
        """
        dateformat = '%Y%m%d%H%M%S%z'
        return '%s-%s' % (obj.event_time.strftime(dateformat),
                          obj.volcano.volcano_name)

    # auto bind to get_url method
    event_id_formatted = CustomSerializerMethodField()

    class Meta:
        model = Ash
        geo_field = 'location'
        id = 'id',
        fields = (
            'id',
            'event_id_formatted',
            'volcano',
            'hazard_file',
            'impact_files',
            'event_time',
            'alert_level',
            'task_status',
            'eruption_height',
        )
Beispiel #22
0
class FeatureSerializer(GeoFeatureModelSerializer):
    geom = GeometrySerializerMethodField('get_geom')

    def get_geom(self, obj):
        print('obj', obj.__dict__)
        s = json.dumps(obj.jsonb)
        g1 = geojson.loads(s)
        g2 = shape(g1)
        djgeo = GEOSGeometry(g2.wkt)
        print('geom', djgeo.geojson)
        return GEOSGeometry(g2.wkt)

    #
    title = serializers.SerializerMethodField('get_title')

    def get_title(self, obj):
        return obj.place.title

    class Meta:
        model = PlaceGeom
        geo_field = 'geom'
        id_field = False
        fields = ('place_id', 'src_id', 'title')
Beispiel #23
0
class OperationalPresenceLocationListSerializer(GeoFeatureModelSerializer):
    partners = serializers.SerializerMethodField()
    point = GeometrySerializerMethodField()
    geom = AnnotatedGeometryField(source="*")

    def get_point(self, obj):
        return obj.geo_point or None

    def get_partners(self, obj):
        partners = Partner.objects.filter(
            clusters__response_plan__workspace__countries__gateway_types__locations=obj) \
            .distinct() \
            .values_list('title', flat=True)

        partner_data = {
            cluster: partners.filter(clusters__type=cluster)
            for cluster in set(
                partners.values_list('clusters__type', flat=True))
        }
        partner_data["all"] = partners

        return partner_data

    class Meta:
        model = Location
        geo_field = 'geom'
        fields = (
            'id',
            'title',
            'latitude',
            'longitude',
            'p_code',
            'geom',
            'point',
            'partners',
        )
Beispiel #24
0
class HouseSerializer(GeoFeatureModelSerializer):
    images = ImageSerializer(many=True, required=False)
    date = RentalDateSerializer(required=False)
    description = DescriptionSerializer(required=False)
    contact = ContactSerializer(required=False)
    base = BasicInfoSerializer(required=False)
    requirement = RequirementSerializer(required=False)

    uuid = serializers.CharField(required=True)
    category = serializers.CharField(required=False, default='Lease')
    fulladdress = serializers.CharField(required=False, default='')
    address = serializers.CharField(required=False, default='')
    city = serializers.CharField(required=False, default='')
    state = serializers.CharField(required=False, default='')
    zipcode = serializers.CharField(required=False, default='')
    longitude = serializers.CharField(required=False, default='41.8781')
    latitude = serializers.CharField(required=False, default='87.6298')

    location = GeometrySerializerMethodField(required=False)

    submittime = serializers.CharField(required=False, default='')

    videos = serializers.CharField(required=False, default='')

    def get_location(self, obj):
        return obj.location

    def create(self, validated_data):

        uuid = validated_data.get('uuid')
        category = validated_data.get('category')
        print(validated_data)
        fulladdress = validated_data.get('fulladdress')
        address = validated_data.get('address')

        city = validated_data.get('city')
        state = validated_data.get('state')
        zipcode = validated_data.get('zipcode')
        submittime = validated_data.get('submittime')

        longitude = validated_data.get('longitude')
        latitude = validated_data.get('latitude')
        location = Point(float(longitude), float(latitude))

        # Date
        rental_date = validated_data.get('date')
        # print(rental_date)

        # Description
        house_description = validated_data.get('description')

        # Contact
        contact_info = validated_data.get('contact')

        # Base
        basic_info = validated_data.get('base')

        # Requirement
        rental_requirement = validated_data.get('requirement')

        images_data = validated_data.get('images')

        videos = validated_data.get('videos')

        if rental_date:
            # print(rental_date)
            date = HouseRentalDate()
            date.starttime = rental_date.get('starttime')
            date.endtime = rental_date.get('endtime')
            date.save()

        if house_description:
            # print(house_description)
            description = HouseDescription()
            description.title = house_description.get('title')
            description.description = house_description.get('description')
            description.save()

        if contact_info:
            # print(contact_info)
            contact = HouseContact()
            contact.phonenumber = contact_info.get('phonenumber')
            contact.email = contact_info.get('email')
            contact.wechat = contact_info.get('wechat')
            contact.save()

        if basic_info:
            # print(basic_info)
            base = HouseBasicInfo()
            base.price = basic_info.get('price')
            base.housetype = basic_info.get('housetype')
            base.roomtype = basic_info.get('roomtype')
            base.bathroom = basic_info.get('bathroom')
            base.parkinglot = basic_info.get('parkinglot')
            base.washingmachine = basic_info.get('washingmachine')

            base.save()

            includeds_data = basic_info.get('included')
            nearbys_data = basic_info.get('nearby')

            for included_data in includeds_data:
                included_instance = HouseIncluded(base=base)
                included_instance.included = included_data.get('included')
                included_instance.save()

            for nearby_data in nearbys_data:
                nearby_instance = HouseNearby(base=base)
                nearby_instance.nearby = nearby_data.get('nearby')
                nearby_instance.save()

        if rental_requirement:
            requirement = HouseRequirement()
            requirement.leaseperiod = rental_requirement.get('leaseperiod')
            requirement.gender = rental_requirement.get('gender')
            requirement.cooking = rental_requirement.get('cooking')
            requirement.smoking = rental_requirement.get('smoking')
            requirement.save()

            otherrequirements_data = rental_requirement.get(
                'otherrequirements')

            for otherrequirement_data in otherrequirements_data:
                otherrequirement_instance = HouseOtherRequirement(
                    requirement=requirement)
                otherrequirement_instance.otherrequirement = otherrequirement_data.get(
                    'otherrequirement')
                otherrequirement_instance.save()

        house = House(uuid=uuid)

        if date:
            house.date = date
        if description:
            house.description = description
        if contact:
            house.contact = contact
        if base:
            house.base = base
        if requirement:
            house.requirement = requirement

        house.category = category

        house.fulladdress = fulladdress
        house.address = address
        house.city = city
        house.state = state
        house.zipcode = zipcode
        house.longitude = longitude
        house.latitude = latitude
        house.location = location

        house.submittime = submittime
        house.videos = videos

        # print(house)

        house.save()

        # Image
        for image_data in images_data:
            print(image_data.get('image'))
            image_instance = HouseImage(house=house)
            image_instance.image = image_data.get('image')
            image_instance.save()

        return house

    def update(self, instance, validated_data):

        uuid = validated_data.get('uuid')
        category = validated_data.get('category')

        fulladdress = validated_data.get('fulladdress')
        address = validated_data.get('address')

        city = validated_data.get('city')
        state = validated_data.get('state')
        zipcode = validated_data.get('zipcode')
        submittime = validated_data.get('submittime')

        longitude = validated_data.get('longitude')
        latitude = validated_data.get('latitude')
        location = Point(float(longitude), float(latitude))

        # Date
        rental_date = validated_data.get('date')

        # Description
        house_description = validated_data.get('description')

        # Contact
        contact_info = validated_data.get('contact')

        # Base
        basic_info = validated_data.get('base')

        # Requirement
        rental_requirement = validated_data.get('requirement')

        images_data = validated_data.get('images')

        videos = validated_data.get('videos')

        instance.uuid = uuid
        instance.category = category
        instance.fulladdress = fulladdress
        instance.address = address
        instance.city = city
        instance.state = state
        instance.zipcode = zipcode

        instance.submittime = submittime
        instance.videos = videos

        instance.longitude = longitude
        instance.latitude = latitude
        instance.location = location

        instance.save()

        if rental_date:
            date = HouseRentalDate(house=instance)
            date.starttime = rental_date.get('starttime')
            date.endtime = rental_date.get('endtime')
            date.save()

        if house_description:
            description = HouseDescription(house=instance)
            description.title = house_description.get('title')
            description.description = house_description.get('description')
            description.save()

        if contact_info:
            contact = HouseContact(house=instance)
            contact.phonenumber = contact_info.get('phonenumber')
            contact.email = contact_info.get('email')
            contact.wechat = contact_info.get('wechat')
            contact.save()

        if basic_info:
            base = HouseBasicInfo(house=instance)
            base.price = basic_info.get('price')
            base.housetype = basic_info.get('housetype')
            base.roomtype = basic_info.get('roomtype')
            base.bathroom = basic_info.get('bathroom')
            base.parkinglot = basic_info.get('parkinglot')
            base.washingmachine = basic_info.get('washingmachine')

            base.save()

            includeds_data = basic_info.get('included')
            nearbys_data = basic_info.get('nearby')

            for included_data in includeds_data:
                included_instance = HouseIncluded(base=base)
                included_instance.name = included_data
                included_instance.save()

            for nearby_data in nearbys_data:
                nearby_instance = HouseNearby(base=base)
                nearby_instance.name = nearby_data
                nearby_instance.save()

        if rental_requirement:
            requirement = HouseRequirement(house=instance)
            requirement.leaseperiod = rental_requirement.get('leaseperiod')
            requirement.gender = rental_requirement.get('gender')
            requirement.cooking = rental_requirement.get('cooking')
            requirement.smoking = rental_requirement.get('smoking')
            requirement.save()

            otherrequirements_data = rental_requirement.get(
                'otherrequirements')

            for otherrequirement_data in otherrequirements_data:
                otherrequirement_instance = HouseOtherRequirement(
                    requirement=requirement)
                otherrequirement_instance.name = otherrequirement_data
                otherrequirement_instance.save()
        # Image
        for image_data in images_data:
            image_instance = HouseImage(house=instance)
            image_instance.image = image_data
            image_instance.save()

        return instance

    class Meta:
        model = House
        geo_field = 'location'
        fields = ('id', 'uuid', 'category', 'fulladdress', 'address', 'city',
                  'state', 'zipcode', 'submittime', 'longitude', 'latitude',
                  'date', 'description', 'contact', 'base', 'requirement',
                  'images', 'videos')
class BMHouseSerializer(GeoFeatureModelSerializer):

    uuid = serializers.CharField(required=True)
    category = serializers.CharField(required=False, default='Lease')
    fulladdress = serializers.CharField(required=False, default='No Data')
    address = serializers.CharField(required=False, default='')
    city = serializers.CharField(required=False, default='No Data')
    state = serializers.CharField(required=False, default='No Data')
    zipcode = serializers.CharField(required=False, default='No Data')
    longitude = serializers.CharField(required=False, default='41.8781')
    latitude = serializers.CharField(required=False, default='87.6298')

    location = GeometrySerializerMethodField(required=False)

    submittime = serializers.CharField(required=False, default='No Data')

    date = RentalDateField(source='*')

    description = DescriptionField(source='*')

    contact = ContactField(source='*')

    base = BasicInfoField(source='*')

    requirement = RequirementField(source='*')

    images = ImagesField(source='*')

    videos = serializers.CharField(required=False, default='No Data')

    def get_location(self, obj):
        return obj.location

    def create(self, validated_data):

        uuid = validated_data.get('uuid')
        category = validated_data.get('category')

        fulladdress = validated_data.get('fulladdress')
        address = validated_data.get('address')

        city = validated_data.get('city')
        state = validated_data.get('state')
        zipcode = validated_data.get('zipcode')
        submittime = validated_data.get('submittime')

        longitude = validated_data.get('longitude')
        latitude = validated_data.get('latitude')
        location = Point(float(longitude), float(latitude))

        starttime = validated_data.get('starttime')
        endtime = validated_data.get('endtime')

        title = validated_data.get('title')
        description = validated_data.get('description')

        phonenumber = validated_data.get('phonenumber')
        email = validated_data.get('email')
        wechat = validated_data.get('wechat')

        price = validated_data.get('price')
        housetype = validated_data.get('housetype')
        roomtype = validated_data.get('roomtype')
        bathroom = validated_data.get('bathroom')
        parkinglot = validated_data.get('parkinglot')
        washingmachine = validated_data.get('washingmachine')
        included = validated_data.get('included')
        nearby = validated_data.get('nearby')

        leaseperiod = validated_data.get('leaseperiod')
        gender = validated_data.get('gender')
        cooking = validated_data.get('cooking')
        smoking = validated_data.get('smoking')
        otherrequirements = validated_data.get('otherrequirements')

        images = validated_data.get('images')

        videos = validated_data.get('videos')

        house = BMHouse(uuid=uuid)

        house.category = category

        house.fulladdress = fulladdress
        house.address = address
        house.city = city
        house.state = state
        house.zipcode = zipcode
        house.longitude = longitude
        house.latitude = latitude
        house.location = location

        house.submittime = submittime

        house.starttime = starttime
        house.endtime = endtime

        house.title = title
        house.description = description

        house.phonenumber = phonenumber
        house.email = email
        house.wechat = wechat

        house.price = price
        house.housetype = housetype
        house.roomtype = roomtype

        house.bathroom = bathroom
        house.parkinglot = parkinglot
        house.washingmachine = washingmachine
        house.included = included
        house.nearby = nearby

        house.leaseperiod = leaseperiod
        house.gender = gender
        house.cooking = cooking
        house.smoking = smoking
        house.otherrequirements = otherrequirements

        house.images = images

        house.videos = videos

        # print(house)

        house.save()

        return house

    def update(self, instance, validated_data):

        uuid = validated_data.get('uuid')
        category = validated_data.get('category')

        fulladdress = validated_data.get('fulladdress')
        address = validated_data.get('address')

        city = validated_data.get('city')
        state = validated_data.get('state')
        zipcode = validated_data.get('zipcode')
        submittime = validated_data.get('submittime')

        longitude = validated_data.get('longitude')
        latitude = validated_data.get('latitude')
        location = Point(float(longitude), float(latitude))

        starttime = validated_data.get('starttime')
        endtime = validated_data.get('endtime')

        title = validated_data.get('title')
        description = validated_data.get('description')

        phonenumber = validated_data.get('phonenumber')
        email = validated_data.get('email')
        wechat = validated_data.get('wechat')

        price = validated_data.get('price')
        housetype = validated_data.get('housetype')
        roomtype = validated_data.get('roomtype')
        bathroom = validated_data.get('bathroom')
        parkinglot = validated_data.get('parkinglot')
        washingmachine = validated_data.get('washingmachine')
        included = validated_data.get('included')
        nearby = validated_data.get('nearby')

        leaseperiod = validated_data.get('leaseperiod')
        gender = validated_data.get('gender')
        cooking = validated_data.get('cooking')
        smoking = validated_data.get('smoking')
        otherrequirements = validated_data.get('otherrequirements')

        images = validated_data.get('images')

        videos = validated_data.get('videos')

        instance.uuid = uuid
        instance.category = category

        instance.fulladdress = fulladdress
        instance.address = address
        instance.city = city
        instance.state = state
        instance.zipcode = zipcode
        instance.longitude = longitude
        instance.latitude = latitude
        instance.location = location

        instance.submittime = submittime

        instance.starttime = starttime
        instance.endtime = endtime

        instance.title = title
        instance.description = description

        instance.phonenumber = phonenumber
        instance.email = email
        instance.wechat = wechat

        instance.price = price
        instance.housetype = housetype
        instance.roomtype = roomtype

        instance.bathroom = bathroom
        instance.parkinglot = parkinglot
        instance.washingmachine = washingmachine
        instance.included = included
        instance.nearby = nearby

        instance.leaseperiod = leaseperiod
        instance.gender = gender
        instance.cooking = cooking
        instance.smoking = smoking
        instance.otherrequirements = otherrequirements

        instance.images = images

        instance.videos = videos

        instance.save()

        return instance

    class Meta:
        model = BMHouse
        geo_field = 'location'
        fields = ('id', 'uuid', 'category', 'fulladdress', 'address', 'city',
                  'state', 'zipcode', 'submittime', 'longitude', 'latitude',
                  'date', 'description', 'contact', 'base', 'requirement',
                  'images', 'videos')