Проблемы SRID с Geo Django на MySQL 8 - PullRequest
0 голосов
/ 25 мая 2020

Geo Django не соблюдает SRID с MySQL 8.

Я создал новый столбец

geo_code = PointField(srid=4326)

и запустил makemigrations. Запуск sqlmigrate в сгенерированной миграции дает

BEGIN;
--
-- Create model Location
--
CREATE TABLE `locations_location` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `geo_code` POINT NOT NULL);
CREATE SPATIAL INDEX `locations_location_geo_code_id` ON `locations_location`(`geo_code`);
COMMIT;

Посмотрите, как был проигнорирован SRID.

Теперь все, что я добавляю в этот столбец, использует SRID 0 - что неверно. Я получаю неверные результаты, если использую функцию ST_DISTANCE с SRID 0.

Я пробовал использовать migrations.SeparateDatabaseAndState для создания столбца с правильным ограничением SRID со следующим SQL

ALTER TABLE backend_userprofile ADD COLUMN geocode_point POINT NULL SRID 4326;

Теперь, если я попытаюсь вставить данные в этот столбец, я получу следующую ошибку:

django.db.utils.OperationalError: (3643, "The SRID of the geometry does not match the SRID of the
column 'geo_code'. The SRID of the geometry is 0, but the SRID of the column is 4326. 
Consider changing the SRID of the geometry or the SRID property of the column.")

Django все еще пытается вставить данные с SRID 0 и MySQL вызывает ошибку, потому что столбец имеет ограничение на SRID.

Есть ли способ заставить Django работать с правильными SRID?

...