レガシーデータベースと統合する必要があるDjangoORMモデルがあります。モデルはを介して生成され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」のnull値がnull以外の制約に違反しています」というメッセージとともにをスローします。
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;
これに光を当てる助けがあれば大歓迎です。