2016-04-05 5 views
1

レガシーdbからデータをロードする必要がある新しいDjangoプロジェクトで作業していますが、レガシーdbから。Django ORMはレガシーデータベースからデータをロードした後にモデルのプライマリキーを自動設定できません

レガシーdbの主キーの範囲は10000から200000です。新しいdbはPostgres 9.5であり、手動でSQLスキーマを設定することはありません。

私のモデルのような単純なことができます

class MyModel(Model): 
    id = IntegerField(primary_key=True) 

私はMyModel().save()またはMyModel.create()を実行すると、この意志が失敗しました。データの読み込み時に使用したのと同じようにMyModel(id=233).save()を実行しても問題ありません。

私は、主キーの自動生成を開始する場所がわからないためだと思います。これを修正するには?

id = models.AutoField(primary_key=True) 

あなたはidとしてそれを名前を付けたい場合は、あなたを:ジャンゴで自動インクリメントフィールドを追加するには

答えて

3

は、あなたは、あなたがこのようなあなたのidフィールドを定義する必要がありAutoField

を使用することになっていますフィールドを定義する必要はありませんが、djangoはそれを行います。

明示的な番号なしのモデルidフィールドは、まだプライマリキーとしてAutoField idを持っています。

+0

移行後、これは機能します。しかし、docはこれがデフォルトの動作であると言います。これは 'id'フィールドを手動で定義する必要はないということですか? – kxxoling

+0

もう一つの質問ですが、もし私が鍵 'id'を300000から始めるなら、どうすればいいですか? – kxxoling

+0

はい、djangoはデフォルトで 'id' AutoFieldを追加します。 'id'として名前を付ける場合は、手動で追加する必要はありません。 – v1k45

関連する問題