【问题标题】:Django avoids creating PointField in the database when I run python manage.py syncdb当我运行 python manage.py syncdb 时,Django 避免在数据库中创建 PointField
【发布时间】:2011-01-19 16:38:56
【问题描述】:

我正在使用 Django 1.2.3、PostGIS 1.5.2。

当我跑步时出于某种原因

python manage.py syncdb

它从我的模型创建数据库中的所有其他字段,但避免创建一个我命名为 point 的字段,它应该是一个 PointField。

在我导入的 model.py 文件中:

from django.contrib.gis.db import models 

并评论:

#from django.db import models

我的模型看起来像这样:

class MyModel(models.Model):
    myid = models.AutoField(primary_key=True)
    title = models.CharField(max_length=50)
    point = models.PointField()
    objects = models.GeoManager()

另外,在创建管理端时,我收到以下错误:

Failed to install index for reports.MyModel model: permission denied for relation spatial_ref_sys
CONTEXT:  SQL statement "SELECT SRID         FROM spatial_ref_sys WHERE SRID = new_srid"
PL/pgSQL function "addgeometrycolumn" line 74 at SQL statement
SQL statement "SELECT AddGeometryColumn('','',$1,$2,$3,$4,$5)"
PL/pgSQL function "addgeometrycolumn" line 4 at SQL statement

在我的setting.py中我添加了:

DATABASES = {
    'default': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis',

和

INSTALLED_APPS = (
...
   'django.contrib.gis',
...

任何想法为什么我会遇到这个问题?谢谢!

【问题讨论】:

    标签: django django-models django-admin postgis


    【解决方案1】:

    问题是 django 使用的 PostgreSQL 用户角色权限不足。

    当我使用 PostGIS 启用我的数据库时发生了什么,它使用不同的用户角色创建了几个表“geometry_columns”和“spatial_ref_sys”。因此,当 Django 尝试访问这两个表时,它再次阻塞,因为它没有足够的权限。

    就这么简单,哇:)

    【讨论】:

    • 您是否将 django 用户的角色更改为超级用户?
    • 我刚刚遇到了同样的错误,并通过使用 SQL 更改有问题的两个表的所有者来修复它:ALTER TABLE geometry_columns OWNER TO newuser 作为超级用户执行。
    • 访问spatial_ref_sys 列的唯一方法是使用超级用户。
    【解决方案2】:

    想让您知道我在 Django 1.4.3、Postgres 9.1 和 PostGIS 2 上遇到了这个错误。 在我下载并使用了最新的 Django 开发版(1.6 alpha)后,它就起作用了。 Postgres 用户无需成为超级用户。显然在 Django 1.5 中添加了对 PostGIS 2 的支持

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-13
      • 1970-01-01
      • 2014-06-07
      • 1970-01-01
      • 2010-11-30
      • 2016-01-05
      • 1970-01-01
      相关资源
      最近更新 更多