【问题标题】:GeoDjango project missing fields from database schemaGeoDjango 项目缺少数据库模式中的字段
【发布时间】:2011-08-01 14:12:05
【问题描述】:

我使用 PostGIS 后端创建了一个 Django 项目,据我所知,这一切似乎都很好。我现在在这个项目中创建了一个应用程序如下:

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 函数文件方法,而不是模板方法)

为任何帮助提前欢呼

这是从一个空架构完成的,并且表是从头开始创建的

【问题讨论】:

    标签: django postgresql django-models postgis geodjango


    【解决方案1】:

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

    【讨论】:

    • 这是默认 SRID 的问题 - 可能是在我的数据库设置期间,非常感谢,这确实生成了正确的字段(好吧,至少是 SQL),我现在已经成功构建了我的表。干杯凯文!
    【解决方案2】:

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

    例如使用mysql drop 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 ...
    

    编辑:

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

    【讨论】:

    • 嗨 kreigar,感谢您的帖子 - 我应该提到这是从一个新的空数据库完成的,那里肯定没有表。我已经手动删除了表格以确保是这种情况(使用与此处相同的过程)但没有区别。这就是“./manage.py sql”命令很重要的原因——Django 甚至没有尝试创建字段——很奇怪,不是吗?
    • @pocon64 这很奇怪,你能从 settings.py 发布你的数据库吗?
    • DATABASES = { 'default': { 'ENGINE': 'django.contrib.gis.db.backends.postgis', 'NAME': 'myschema', 'USER': 'myuser', 'PASSWORD': 'mypass', 'HOST': 'localhost', 'PORT': '5432', 'TEST_MIRROR': '', 'WAIT_TIMEOUT': 120 }, }
    猜你喜欢
    • 2019-09-13
    • 1970-01-01
    • 2022-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多