2

レガシーデータベースと統合する必要がある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;

これに光を当てる助けがあれば大歓迎です。

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 に答える