2017-03-27 11 views
0

Django ORMは、レコードの挿入中に特別なSQLトリガーでDBに生成されたIDを解決しません。 IDなしでモデルを保存するとき、正しく保存され、IDがDBにありますか? m.idは私にNoneを返します。DB上のSQLスクリプトで生成されたID(Django ORM)の解決方法

class SomeModel(Model): 
    id = IntegerField(primary_key=True) 
    name = CharField(null=False, max=50) 

m = SomeModel(name='asd') 
m.save() 
m.id # - None 

保存後に自動生成されたIDを解決する方法はありますか。または、私はどのようにsave()メソッドを書き換えることができますか?フィールドタイプを変更することはできますか?

IDENTITYの代わりに自分のトリガーを使用する必要があります。

+1

「id」フィールドをIntegerFieldとして定義したのはなぜですか?実際、Djangoに自動的にそうするのではなく、なぜそれを定義したのですか? –

+0

@DanielRoseman私はIDの名前を知っているので、マイグレーション(それはIDを生成するトリガーを追加する)でそれを使用する必要があります –

+0

しかし、Djangoはあなたのトリガーを知らないので、フィールドがdb 。 –

答えて

0

Djangoのドキュメントをお読みください。デフォルトでは、Djangoにプライマリキーと言う必要はありません。しかし、あなたがしたい場合。

class SomeModel(Model): 
    id = models.AutoField(primary_key=True, db_index=True) 
    name = CharField(null=False, max=50) 
+0

AutoFieldはIDENTITY(1,1)を追加しますが、代わりにトリガーを使用する必要があります。 –

関連する問題