私はいくつかのレガシーコードから継承したDBスキーマを持っています。今ではDjangoを使ってテーブルをモデルに反映させようと考えています。つまり、私はテーブルをdjangoモデルを使って生成することはできません。私はそうのように、このに行を挿入するとDjangoモデルで自動生成された主キーIDを取得する方法
class StudentProfile(models.Model):
id=models.IntegerField(primary_key=True)
joining_on=models.DateField()
brothername=models.CharField(max_length=45)
class Meta:
db_table="student_profile"
- ::テーブルスキーマはそうのようになります -
mysql> desc student_profile;
+-------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| joining_on | datetime | YES | | NULL | |
| brothername | varchar(45) | YES | | NULL | |
+-------------+-------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)
今、私はこのスキーマ用に作成したDjangoのモデルは次のようになります -
StudentProfile.objects.insert(brothername="Bro")
行が正しく挿入されています。しかし、idフィールドを抽出する方法はありません。このフィールドはAutoField
ではないため、djangoはMySqlによって自動的に生成されたIDをコピーしません。行が作成されたid
の値を取得するにはどうすればよいですか?私は(https://code.djangoproject.com/ticket/8799#comment:1)を確認しましたが、これは設計上のようです。しかし、まだid
にアクセスしてStudentProfile
モデルに反映させる方法が必要です。私に何ができる?
デフォルトのsave()
をオーバーライドして、モデルのsave()
に明示的にid
を指定する方法があります。しかし、それは正しい方法ですか?データベース(MySql)はIDを生成する方法を提供します。アプリケーションで実行中のカウンタを維持するのではなく、この事実を私の利点として使用できる必要があります。何かヒント?あなたはすなわち、完全id
列を定義するスキップでき
? – Selcuk
もし私がそれをしないと、Djangoは自動的にproject.app.StudentProfile.idのようなタイプのフィールドを作成します。明らかに、私の基になるスキーマには、この名前の列はありません。要するに、私はDjangoの 'AutoField'が提供するすべてのものを望んでいます。名前を私のものにしたいだけです。 – abhayAndPoorvisDad
Djangoはデフォルトで 'id'という列を作成します。これはあなたのレガシーな列と同じです。 'project.app.StudentProfile.id'はPythonコードのフィールド名です。データベースの列名ではありません。この方法ではうまくいかないのですか? – Selcuk