主键自动递增的Django和PostgreSQL序列

主键自动递增的Django和PostgreSQL序列,django,postgresql,Django,Postgresql,我的postgresql-8.4数据库中有以下表格和顺序: 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), CONSTR

我的postgresql-8.4数据库中有以下表格和顺序:

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值…

实际上,我提供了这个答案。postgres中的数据类型serial是一个自动递增的四字节整数。如果您将id从整数更改为串行,这将起作用

 id serial NOT NULL

阅读更多内容:

事实上,我是在回答这个问题。postgres中的数据类型serial是一个自动递增的四字节整数。如果您将id从整数更改为串行,这将起作用

 id serial NOT NULL

阅读更多信息:

您是否使用syncdb创建了表?在my DB中,所有ID字段都是串行的:ID serial NOT NULL,否,我已经分别创建了DB表和模型。这已经有一段时间了,但是如果其他人来了,您应该在自己创建表时添加模型的元选项。您是使用syncdb创建表的吗?在我的DB中,所有ID字段都是串行的:ID serial NOT NULL,不,我已经分别创建了DB表和模型。这已经有一段时间了,但是如果其他人来了,你应该在自己创建表时添加模型的元选项。是的,现在它可以工作了!解决方案确实是用串口改变整数。是的,现在它可以工作了!解决方案确实是用串行方式更改整数。