/ / Brakuje projektu w projekcie GeoDjango ze schematu bazy danych - django, postgresql, django-modele, postgis, geodjango

Brakujące w projekcie GeoDjango pola ze schematu bazy danych - django, postgresql, django-models, postgis, geodjango

Stworzyłem projekt Django, używając zaplecza PostGIS, z którego wszystko wydaje się dobre, o ile wiem. Utworzyłem teraz aplikację w tym projekcie w następujący sposób:

from django.contrib.gis.db import models

class MyPlace(models.Model):
name = models.CharField(max_length=255)
location = models.PointField()

objects = models.GeoManager()

Powinien to być prosty model nazwy / punktupara (do zbudowania później), ale baza danych nie tworzy pola lokalizacji. Nie ma błędu, a pole jest ignorowane, dopóki nie spróbuję uzyskać dostępu do modelu (za pomocą administratora), w którym działa z komunikatem „DatabaseError: kolumna myproj_myplace.location nie istnieje”

Naprawdę nie jestem pewien, co się tutaj dzieje, ponieważ nie ma błędu podczas analizowania (syncdb działa bez wyjątku). Kiedy uruchomiłem polecenie sql dla modelu, otrzymałem następujące informacje:

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

Znowu żadnych pól! Jakieś pomysły?

Mam zarówno „django.contrib.gis”, jak i moją aplikację w mojej aplikacji INSTALLED_APPS i zbudowałem schemat bazy danych z obsługą PostGIS (dodając metodę pliku funkcji sql, a nie metodę szablonu)

Pozdrawiam z góry za wszelką pomoc

Odbywa się to z pustego schematu, a tabela jest tworzona od podstaw

Odpowiedzi:

2 dla odpowiedzi № 1

Spróbuj „python manage.py sqlall {app} ", wyjście sql z jakiegoś powodu nie zawiera kolumn przestrzennych, ale sqlall tak. Następnie spróbuj uruchomić dane wyjściowe bezpośrednio w bazie danych za pomocą pgadmin3, prawdopodobnie uzyskasz jaśniejszy obraz tego, co się dzieje.


0 dla odpowiedzi nr 2

Django nie wykonuje migracji. Spójrz na używanie South w przypadku migracji lub ręcznie usuń tabelę i zsynchronizuj ją ponownie, aby odbudować tabelę.

Na przykład przy użyciu tabeli dropping mysql i 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 ...

edytować:

Ups, prawdopodobnie używasz postgresql. ktoś inny mógłby podać przykład, ale istniejąca tabela myplace w Twojej bazie danych nadal jest najbardziej prawdopodobnym problemem.