GeoDjango проект пропускает поля из схемы базы данных - PullRequest
3 голосов
/ 08 апреля 2011

Я создал проект Django, используя бэкэнд PostGIS, который, насколько я могу судить, кажется, все хорошо. Теперь я создал приложение в этом проекте следующим образом:

from django.contrib.gis.db import models

class MyPlace(models.Model):
    name = models.CharField(max_length=255)
    location = models.PointField()

    objects = models.GeoManager()

Это должна быть простая модель для пары имя / точка (будет построена позже), но база данных не создает поле местоположения. Ошибка отсутствует, и поле игнорируется до тех пор, пока я не попытаюсь получить доступ к модели (используя Admin), где она выкрикивает сообщение «DatabaseError: column myproj_myplace.location не существует»

Я действительно не уверен, что здесь происходит, так как нет ошибки при разборе (syncdb работает без исключения). Когда я запустил команду sql для модели, это то, что я получил:

BEGIN;
CREATE TABLE "myproj_myplace" (
    "id" serial NOT NULL PRIMARY KEY,
    "name" varchar(255) NOT NULL
)
;
COMMIT;

Опять нет полей! Есть идеи?

У меня есть и 'django.contrib.gis', и мое приложение в моем INSTALLED_APPS, и я построил схему базы данных с поддержкой PostGIS (добавив метод файла функций sql, а не метод шаблона)

Заранее благодарим за любую помощь

Это делается из пустой схемы, а таблица создается с нуля

Ответы [ 2 ]

2 голосов
/ 13 апреля 2011

Попробуйте 'python manage.py sqlall {app}', вывод sql по некоторым причинам не включает пространственные столбцы, а sqlall делает. Затем попробуйте запустить вывод непосредственно в базе данных с помощью pgadmin3, и вы, вероятно, получите более четкое представление о том, что происходит не так.

0 голосов
/ 08 апреля 2011

Джанго не выполняет миграцию.Посмотрите на использование South для миграций или вручную отбросьте таблицу и выполните повторную синхронизацию, чтобы перестроить таблицу.

Например, используя mysql droping table и syncdb:

$ mysql -u myprojadmin -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 19215
Server version: 5.1.49-1ubuntu8.1 (Ubuntu)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use myproj;

Database changed
mysql> drop table myproj_myplace;
Query OK, 0 rows affected (0.02 sec)

mysql> exit;
Bye
$ ./manage.py syncdb
Syncing...
Creating tables ...

edit:

К сожалению, вы используете postgresql, вероятно.кто-то другой может дать вам пример, но наиболее вероятной проблемой остается существующая таблица myplace в вашей базе данных.

...