2

我有一个需要与旧数据库集成的 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 的理解,如果我希望它自动递增因此需要更改为 AutoField。

我可以毫无问题地查询对象,但是当我尝试创建和保存新对象时遇到麻烦。以下代码抛出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;

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

4

1 回答 1

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)
    #...
于 2013-01-30T10:11:53.313 回答