Django ORM模型对象的主键中的空值

时间:2013-01-30 10:07:23

标签: database django postgresql orm django-models

我有一个需要与旧数据库集成的Django ORM模型。该模型是通过manage.py inspectdb生成的,类定义如下:

class ClientJob(models.Model):
    id = models.AutoField(primary_key=True, db_column="id")
    CustomerGuid = models.CharField(max_length=40, db_column='CustomerGUID', blank=True)
    JobGuid = models.CharField(max_length=40, db_column='JobGUID', blank=True)
    AgentGuid = models.CharField(max_length=40, db_column='AgentGUID', blank=True)

    class Meta:
        db_table = u'ClientJob'

主键id最初被定义为models.IntegerField(primary_key=True),但根据我对Django的理解,如果我希望它自动增加,那么它需要是一个自动字段,因此需要更改。

我可以毫无问题地查询对象,但是当我尝试创建和保存新对象时遇到麻烦。以下代码抛出IntegrityError消息“列中的空值”id“违反非空约束”。

new_job = ClientJob.objects.create(CustomerGuid=customer_guid, JobGuid=str(uuid4()), AgentGuid=agent_guid)
new_job.save()

我怀疑(但绝不确定)这可能是因为我的ClientJob表的主键依赖于自定义序列。序列的定义如下:

CREATE SEQUENCE seq_client_job_id
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 11020
  CACHE 1;
ALTER TABLE seq_client_job_id
  OWNER TO ssa;

任何有助于阐明这一点的帮助将不胜感激。

1 个答案:

答案 0 :(得分:4)

只需删除或取消注释模型类中的id行 - 它应该像魅力一样。

class ClientJob(models.Model):
    #id = models.AutoField(primary_key=True, db_column="id")
    CustomerGuid = models.CharField(max_length=40, db_column='CustomerGUID', blank=True)
    JobGuid = models.CharField(max_length=40, db_column='JobGUID', blank=True)
    #...