Не удается преобразовать ключевое слово 'location' в поле
Добрый день,
Я потратил пару дней, пытаясь решить эту проблему, и надеюсь, что вы сможете помочь.
Я установил django и хотел бы использовать leaflet для отображения положения моей метеостанции.
Я нашел, что хороший учебник и я могу завершить с примерами скриптов
Однако теперь я хотел бы применить это упражнение к своему проекту. У меня есть база данных с примерно менее чем миллионом мер, и мне нужно сохранить структуру моей базы данных/таблицы. Я сделаю все возможное, чтобы описать мою проблему.
Моя проблема начинается здесь (viewsets.py) и здесь . Как я понимаю, 'location' соответствует полю моей таблицы, которое должно содержать значение, подобное этому
'POINT(6.000251769184164 46.19337852885697)',0
потому что тип поля - POINT.
Однако в моей базе данных нет такого поля. Вместо этого у меня есть поле station_lat
(float(8.6)) и station_lng
(float(8.6)), где я сохраняю широту и долготу. По этой причине у меня возникает ошибка, потому что не удается найти 'location'
Не удается преобразовать ключевое слово 'location' в поле. Варианты: fields_id_field, fields_id_field_id, id_station, installed, map, датчики, station_active, station_alt, station_archive, station_created, station_description, station_lat, station_lng, station_longname, station_name, station_order, stations_types_id_stations_type, ttn_app_id, ttn_dev_id, ttn_hardware_serial
Поскольку я должен использовать свою базу данных, поскольку поля определены, и поскольку 'geo_field является обязательным, я сначала хотел бы знать, если в моем serializerer.py файле , я могу адаптировать 'geo_field' для поиска полей 'station_lat' и 'station_lng) и преобразовать его в следующий формат
'POINT(6.000251769184164 46.19337852885697)',0
Думаю, мне предстоит решить аналогичную проблему в поле viewsets.py, но пока что, если я закомментирую эту строку, она не выдает ошибку.
Надеюсь, что нескольких слов достаточно, чтобы понять мои переживания, потому что я в отчаянии :(
)Большое спасибо за любые советы и подсказки, или решение, которое вы можете мне предоставить. Хорошей недели
Вы можете сохранить поле location в вашей модели Stations, и просто изменить его в методе save() для удовлетворения формата POINT:
from django.contrib.gis.db.models import PointField
from django.contrib.gis.geos import Point
class Stations(models.Model):
...
location = PointField(blank=True, null=True, srid=4326)
station_lat = models.FloatField(blank=True, null=True)
station_lng = models.FloatField(blank=True, null=True)
...
class Meta:
managed = False
db_table = 'stations'
def save(self, *args, **kwargs):
self.location = Point(float(self.station_lng), float(self.station_lat))
super(Stations, self).save(*args, **kwargs)
Большое спасибо, это действительно лучше, но кое-что идет хорошо :).
Я изменил свои файлы моделей, как вы предложили.
- https://github.com/ecosensors/Django/blob/main/EcoSensors/console/map/models.py#L9 и строка 10
- https://github.com/ecosensors/Django/blob/main/EcoSensors/console/map/models.py#L275 .
- https://github.com/ecosensors/Django/blob/main/EcoSensors/console/map/models.py#L292 .
Мне нужно было создать поле 'location' в моей базе данных
Теперь, этот https://github.com/ecosensors/Django/blob/main/EcoSensors/console/map/serializers.py#L24 не выдает ошибку!
и затем, когда я загружаю свои страницы и вижу правую структуру (См. изображение)
Однако, как вы можете видеть, запись геометрии равна null. Что (возможно) имеет смысл, потому что в моей БД поле 'location' не имеет значения, а имеет значение NULL.
обновит ли функция save() поле 'location'?.
Думаю, да!
Теперь, я думаю, у меня другая проблема. Я вручную добавляю значение
'POINT(6.000251769184164 46.19337852885697)',0
на одну станцию, и я получил сообщение
#1416 - Невозможно получить объект геометрии из данных, отправленных в поле GEOMETRY
У меня возникла проблема при создании поля местоположения. Я не смог создать его, сняв флажок null
Полагаю, проблемы связаны.
Могу ли я попросить вас подтвердить, что
Если я должен создать файл 'location' в моей БД/таблице, будет ли функция save() обновит поле 'location'. Если это так, то поле 'location', будет обновляться с тем же значением, каждый раз, когда я обновляю страницу?
Большое спасибо за вашу помощь, которая помогла мне продвинуться на шаг вперед. (Я начинающий)
Удачных выходных
Все работает, спасибо, за исключением одного момента. Мне нужно было создать поле 'location'. У меня возникла проблема при создании этого поля, и я решил ее следующим образом article
Я вижу только один маркер на моей карте, но на самом деле, все маркеры отображаются, но все находятся в одном и том же месте. Это причина, почему я вижу только один маркер.
Если теперь я посмотрю на сериализатор, он вернет мне то
Мы видим геометрию, которая всегда имеет одно и то же значение
"geometry": {
"type": "Point",
"coordinates": [
6.000251769184164,
46.19337852885697
]
},
Похоже, что поле 'location' не обновляется. Почему? Возможно, я не совсем понимаю эту часть
def save(self, *args, **kwargs):
self.location = Point(float(self.station_lng), float(self.station_lat))
super(Stations, self).save(*args, **kwargs)
Когда выполняется сохранение/обновление? Должен ли я выполнить ./manager.py makemigrations
и ./manager.py migrate
для обновления поля 'location'?
Большое спасибо!!!