3

我创建了一个 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()

这应该是一个名称/点对的简单模型(稍后将在此基础上构建),但数据库并未创建位置字段。没有错误,并且该字段被忽略,直到我尝试访问模型(使用管理员),它发出“DatabaseError:列 myproj_myplace.location 不存在”

我真的不确定这里出了什么问题,因为解析没有错误(syncdb 无一例外地工作)。当我为模型运行 sql 命令时,这就是我得到的:

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

再次没有字段!有任何想法吗?

我的 INSTALLED_APPS 中既有 'django.contrib.gis' 也有我的应用程序,并且使用 PostGIS 支持构建了我的数据库模式(添加 sql 函数文件方法,而不是模板方法)

提前欢呼任何帮助

这是从空模式完成的,并且表是从头开始创建的

4

2 回答 2

2

尝试“python manage.py sqlall {app}”,由于某种原因,sql 输出不包含空间列,但 sqlall 包含。然后尝试使用 pgadmin3 直接在数据库上运行输出,您可能会更清楚地知道出了什么问题。

于 2011-04-13T18:04:09.280 回答
0

Django 不执行迁移。查看South用于迁移,或手动删除表并重新同步以重建表。

例如使用 mysql 删除表和同步数据库:

$ 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 ...

编辑:

哎呀,您可能正在使用 postgresql。其他人也许可以给你一个例子,但你数据库中现有的 myplace 表仍然是最有可能的问题。

于 2011-04-08T17:59:34.510 回答