当我运行 python manage.py syncdb 时,Django 避免在数据库中创建 PointField

标签 django django-models django-admin postgis

我正在使用 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 使用的 PostgreSQL 用户角色没有足够的权限。

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

就是这么简单,哇:)

关于当我运行 python manage.py syncdb 时,Django 避免在数据库中创建 PointField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4737982/

相关文章:

python - Django 中的 Forloop.counter

python - 对如何在 Django-social-auth 中应用 google 和 yahoo OpenID 感到困惑

python - 允许通过 Django 管理将 SVG 文件上传到 ImageField

python - Django中的通用一对一关系

python - 将 np.array 索引传递给函数

python - 无法登录在 django 管理后端创建的 super 用户

python - 如何将自定义 javascript 添加到 django-xadmin?

django - 在 Django Admin 中包含来自 OneToOneField 的字段

django - 在 Django-Admin 中通过 row-id 对显示项进行排序

django - 如何对 Django 中的所有记录进行反向外键查找?