def METHOD_NAME(self, form):
    super(BioRecordsUpdateView, self).METHOD_NAME(form)
    geometry_type = self.request.POST.get('geometry_type', None)
    geojson = self.request.POST.get('geometry', None)
    features = json.loads(geojson)
    site_id = self.request.POST.get('location_site', None)
    site = LocationSite.objects.get(id=site_id)
    location_site_name = site.name
    if len(features['features']) > 0:
        signals.post_save.disconnect(
            location_site_post_save_handler,
        )
        signals.post_save.disconnect(
            collection_post_save_update_cluster,
        )
        geometry = (
            GEOSGeometry(json.dumps(features['features'][0]['geometry']))
        )
        if geometry_type == 'Polygon':
            location_type, status = LocationType.objects.get_or_create(
                name='PolygonObservation',
                allowed_geometry='POLYGON'
            )
            location_site, created = LocationSite.objects.get_or_create(
                name=location_site_name,
                geometry_polygon=geometry,
                location_type=location_type,
            )
        elif geometry_type == 'MultiPolygon':
            location_type, status = LocationType.objects.get_or_create(
                name='MutiPolygonObservation',
                allowed_geometry='MULTIPOLYGON'
            )
            location_site, created = LocationSite.objects.get_or_create(
                name=location_site_name,
                geometry_multipolygon=geometry,
                location_type=location_type,
            )
        elif geometry_type == 'LineString':
            location_type, status = LocationType.objects.get_or_create(
                name='LineObservation',
                allowed_geometry='LINE'
            )
            location_site, created = LocationSite.objects.get_or_create(
                name=location_site_name,
                geometry_line=geometry,
                location_type=location_type,
            )
        else:
            location_type, status = LocationType.objects.get_or_create(
                name='PointObservation',
                allowed_geometry='POINT'
            )
            try:
                location_site, created = (
                    LocationSite.objects.get_or_create(
                        name=location_site_name,
                        geometry_point=geometry,
                        location_type=location_type,
                    )
                )
            except LocationSite.MultipleObjectsReturned:
                dupe_sites = LocationSite.objects.filter(
                    name=location_site_name,
                    geometry_point=geometry,
                    location_type=location_type
                )
                location_site = dupe_sites[0]
                BiologicalCollectionRecord.objects.filter(
                    site__in=dupe_sites
                ).update(site=location_site)
                dupe_sites.exclude(id=location_site.id).delete()
        self.object.site = location_site
        self.object.save()
        # reconnect signals
        signals.post_save.connect(
            location_site_post_save_handler,
        )
        signals.post_save.connect(
            collection_post_save_update_cluster,
        )
    return HttpResponseRedirect(self.success_url)