Al trabajar del lado del servidor, Django solamente puede trabajar con lo que le proporcione la sesión del usuario o la comunicación HTTP.
Para guardar los datos en la sesión del usuario tenés que tomar primero los datos vía el método que estás usando ahora mismo, que por motivos de seguridad de datos personales, requiere autorización del usuario (aunque los usuarios pueden configurar sus navegadores para que no les pregunten a la hora de compartir los datos).
Del lado de HTTP no hay nada que te permita saber la localización del usuario, excepto las bases de datos de geolocalización vía IP (aunque, por lo que veo que querés hacer, su precisión no te es suficiente).
Otro punto a considerar es que los navegadores de escritorio no tienen forma de proveer una localización precisa, si te fijas en la página que describe cómo funciona Firefox en estos casos [1], verás que lo único que hace es utilizar los servicios de geolocalización de Google.
[1]
https://www.mozilla.org/en-US/firefox/geolocation/