2011-01-19 9 views
6

Tôi đang sử dụng Django 1.2.3, PostGIS 1.5.2.Django tránh tạo PointField trong cơ sở dữ liệu khi tôi chạy python manage.py syncdb

Đối với một số lý do khi tôi chạy

python manage.py syncdb

nó tạo ra tất cả các lĩnh vực khác trong cơ sở dữ liệu từ các mô hình của tôi, nhưng tránh tạo ra một sân Tôi tên là thời điểm đó phải là một PointField.

Trong file model.py của tôi, tôi đã nhập khẩu:

from django.contrib.gis.db import models 

và nhận xét:

#from django.db import models 

mô hình của tôi trông giống như sau:

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

Ngoài ra khi được tạo phía quản trị viên tôi nhận được các lỗi bên dưới:

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 

Trong setting.py của tôi, tôi đã thêm:

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

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

Bất kỳ IDEs lý do tại sao tôi đang phập phồng vấn đề này? Cảm ơn bạn!

Trả lời

8

Vấn đề là vai trò người dùng PostgreSQL django đang sử dụng không có đủ quyền.

Điều gì đã xảy ra khi tôi bật cơ sở dữ liệu của mình với PostGIS nó tạo ra một vài bảng "geometry_columns" và "spatial_ref_sys" sử dụng vai trò người dùng khác. Vì vậy, một lần nữa khi Django đã cố gắng để truy cập vào hai bảng nó chocked bởi vì nó không có đủ quyền.

Nó là đơn giản, whew :)

+1

Bạn có thay đổi vai trò của người dùng django thành Superuser không? – dannyroa

+0

Tôi vừa gặp lỗi tương tự và sửa nó bằng cách thay đổi chủ sở hữu của hai bảng được đề cập với SQL như sau: 'ALTER TABLE geometry_columns OWNER TO newuser' được thực hiện như một superuser. – markshep

+0

Cách duy nhất để truy cập vào cột 'spatial_ref_sys' là bằng cách sử dụng superuser. –

0

Muốn cho bạn biết rằng tôi đã nhận được lỗi này trên Django 1.4.3, Postgres 9.1 và PostGIS 2. Nó làm việc sau khi tôi tải về và sử dụng Django mới nhất dev (1,6 alpha). Không cần người dùng Postgres làm siêu người dùng. Rõ ràng sự hỗ trợ của PostGIS 2 được thêm vào trong Django 1.5