3

The django.contrib.gis.geoip2 framework expose a high level geolocation api. I want to use it to look up the user timezone, but the queries do not return the timezone, although the maxmind documetion says that their databases include them. Am I missing something or how could this be done?

2 Answers2

3

It would appear that time_zone is a field on the geoip2.records.Location class in the MaxMind GeoIP2 API.

On the Django wrapper, the response is defined here, and does not forward the time_zone field along.

You could add a line to the wrapper that is simply:

    'time_zone': response.location.time_zone,

I'm sure they would appreciate a pull request. :)

Matt Johnson-Pint
  • 230,703
  • 74
  • 448
  • 575
  • 2
    looks like a [PR was committed and available in Django 2.0](https://github.com/django/django/pull/8373). So you call `.city(ip)['time_zone']`. – Tim Tisdall Mar 09 '18 at 16:40
1

The class below over-rides the GeoIP2 class to expose timezone info. Could be useful until / if it's added in the base class (will try to raise a PR for it soon if nobody gets to it first)

from django.contrib.gis.geoip2 import GeoIP2


class GeoipWithTimezone(GeoIP2):
    def timezone(self, query):
        enc_query = self._check_query(query, city=True)
        return self._city.city(enc_query).location.time_zone
gar
  • 14,152
  • 5
  • 30
  • 31