Пример #1
0
 def perform_create(self, serializer):
     municipality = Municipality.get_current_municipality_for_moderator(self.request.user)
     if settings.GOOGLE_GEOCODING_API_KEY and 'coordinates' not in self.request.data:
         address = self.request.data.get('address', '')
         zip_code = self.request.data.get('zip_code', '')
         city = self.request.data.get('city', '')
         formatted_address = f'{address},+{zip_code}+{city}'
         try:
             coordinates = get_coordinates_from_address(formatted_address)
         except APIException:
             raise serializers.ValidationError('This address could not be geocoded. Please confirm your address is right, or try again later.')
         serializer.save(created_by=self.request.user, municipality=municipality, coordinates=coordinates)
     else:
         serializer.save(created_by=self.request.user, municipality=municipality)
Пример #2
0
    def handle(self, *args, **options):
        faulty_coordinates = models.Q(coordinates=Point(0, 0)) | models.Q(
            coordinates__isnull=True)
        # We implicitly exclude faulty locations that are imported, because those should not be edited in our database
        locations_with_faulty_coordinates = Location.objects.filter(
            faulty_coordinates).filter(data_source='')
        self.stdout.write(
            f'Found {locations_with_faulty_coordinates.count()} locations with faulty or null coordinates.'
        )

        for location in locations_with_faulty_coordinates:
            formatted_address = f'{location.address},+{location.zip_code}+{location.city}'
            self.stdout.write(
                f'Getting coordinates for address {repr(formatted_address)}')
            try:
                location.coordinates = get_coordinates_from_address(
                    formatted_address)
                location.save()
            except APIException:
                self.stdout.write(
                    f'Could not get coordinates for {repr(location)}')