Я работаю над проектом местоположения и для бэкэнда использую Django Rest Framework с PostgreSQL. Я получаю объект запроса в следующем формате.
{"BatchId": 1, "GeoLocation": [{"latitude": 28.257999420166016, "longitude": 77.6415388}, {"latitude": 12.9562821, "longitude": 77.6415199}]}
Я хочу сохранить GeoLocation в строковом поле, поэтому я использую ($) для разделения элементов массива. Например: -
28.257999420166016**$**77.6415388
Я создал настраиваемое поле для этого, но оно показывает ошибку аннулирования.
model.py
class GeoLocation(models.Model):
date = models.DateField()
location = ArrayField(GeoLocationField())
GeoLocationField
class GeoLocationField(models.Field):
def from_db_value(self, value, expression, connection):
if value is None:
return value
return parse_location(value)
def get_prep_value(self, value):
return '$'.join([''.join(l) for l in (value.latitude,value.longitude)])
def parse_location(point_string):
args = point_string.split('$')
if len(args) != 2:
raise ValidationError(_("Invalid input for a Location instance"))
return Location(*args)
class Location:
def __init__(self, latitude, longitude):
self.latitude = latitude
self.longitude = longitude
или есть другой способ хранения?