Add truncated lat lon to model

This commit is contained in:
2023-11-24 19:17:43 +01:00
parent bbaa8fa078
commit 7a6bd169bf
2 changed files with 39 additions and 10 deletions

View File

@ -0,0 +1,27 @@
# Generated by Django 4.1.7 on 2023-11-24 18:17
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("locations", "0004_alter_rawgeolocation_options"),
]
operations = [
migrations.AlterModelOptions(
name="rawgeolocation",
options={"get_latest_by": "modified"},
),
migrations.AddField(
model_name="geolocation",
name="truncated_lat",
field=models.FloatField(blank=True, null=True),
),
migrations.AddField(
model_name="geolocation",
name="truncated_lon",
field=models.FloatField(blank=True, null=True),
),
]

View File

@ -20,11 +20,19 @@ class GeoLocation(ScrobblableMixin):
uuid = models.UUIDField(default=uuid4, editable=False, **BNULL)
lat = models.FloatField()
lon = models.FloatField()
truncated_lat = models.FloatField(**BNULL)
truncated_lon = models.FloatField(**BNULL)
altitude = models.FloatField(**BNULL)
class Meta:
unique_together = [["lat", "lon", "altitude"]]
def save(self, *args, **kwargs):
if not self.truncated_lat or not self.truncated_lon:
self.truncated_lat = float(str(self.lat)[:-3])
self.truncated_lon = float(str(self.lon)[:-3])
super(GeoLocation, self).save(*args, **kwargs)
def __str__(self):
if self.title:
return self.title
@ -36,14 +44,6 @@ class GeoLocation(ScrobblableMixin):
"locations:geo_location_detail", kwargs={"slug": self.uuid}
)
@property
def truncated_lat(self):
return float(str(self.lat)[:-3])
@property
def truncated_lan(self):
return float(str(self.lon)[:-3])
@classmethod
def find_or_create(cls, data_dict: Dict) -> "GeoLocation":
"""Given a data dict from GPSLogger, does the heavy lifting of looking up
@ -60,8 +60,8 @@ class GeoLocation(ScrobblableMixin):
data_dict["altitude"] = float(data_dict.get("alt", ""))
location = cls.objects.filter(
lat=data_dict.get("lat"),
lon=data_dict.get("lon"),
truncated_lat=float(str(data_dict.get("lat", ""))[:-3]),
truncated_lon=float(str(data_dict.get("lon", ""))[:-3]),
altitude=data_dict.get("alt"),
).first()
@ -69,6 +69,8 @@ class GeoLocation(ScrobblableMixin):
location = cls.objects.create(
lat=data_dict.get("lat"),
lon=data_dict.get("lon"),
truncated_lat=float(str(data_dict.get("lat", ""))[:-3]),
truncated_lon=float(str(data_dict.get("lon", ""))[:-3]),
altitude=data_dict.get("alt"),
)
return location