我有一个需要与旧数据库集成的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;
任何有助于阐明这一点的帮助将不胜感激。
答案 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)
#...