У меня есть следующая таблица и последовательность в моем PostGreSQL-8.4 базы данных:Django и PostgreSQL последовательность для первичного ключа Autoincrement
CREATE TABLE complexobjectpy
(
id integer NOT NULL,
the_geom geometry,
semcat integer,
CONSTRAINT complexobjectpy_pkey PRIMARY KEY (id),
CONSTRAINT enforce_dims_the_geom CHECK (st_ndims(the_geom) = 2),
CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 900913)
)
WITH (
OIDS=FALSE
);
ALTER TABLE complexobjectpy OWNER TO tss;
CREATE SEQUENCE seq_complexobjectpy
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;
ALTER TABLE seq_complexobjectpy OWNER TO tss;
Следующая вместо этого мой Django модели:
class Complexobjectpy(models.Model):
the_geom = models.GeometryField(srid=900913)
semcat = models.IntegerField()
objects = models.GeoManager()
class Meta:
db_table = u'complexobjectpy'
Выполнение следующих запрос:
myObj = Complexobjectpy(semcat=50, the_geom=geometryMerged.wkt)
myObj.save(using='u1')
Я получаю ошибку:
IntegrityError: null value in column "id" violates not-null constraint
Почему я это понимаю? Читая документацию, я ожидал, что значение id будет выбрано автоматически с использованием последовательности ...
ли вы создать таблицу с помощью SyncDB? В моей БД все поля идентификатора являются серийными: id serial NOT NULL, – Mikael
Нет, я создал таблицу db и модель отдельно. – caneta
Прошло довольно много времени, но если кто-то еще появится, вы должны добавить ['managed = False'] (https://docs.djangoproject.com/en/1.10/ref/models/options/#managed) в свой мета-параметры модели при создании таблиц самостоятельно. – spectras