DjangoではModelのフィールドとして
abc_id = models.AutoField(primary_key=True)
と指定することで、自作の主キーを設定できます。
しかしこの場合に、以下ドキュメントの'主キーの自動インクリメント'に記載ある主キーの取得をおこなった場合、
Django Ver.1公式ドキュメント ※余談【Question.0.5】 Version1の古いドキュメントにしか本機能の説明はないように思われました。 こういった場合は仕方なく古いバージョンを参考にするほかないのでしょうか 皆さんはどのように仕様確認をされていますか。
以下のように取得を試みましたが、主キーの取得が適いませんでした。
form.save() print(form.id)#以下のエラーが発生します。 print(form.abc_id)#このようにしても以下のようなエラーが発生します。 print(form.pk)#このようにしても以下のようなエラーが発生します。
AttributeError 'Form' object has no attribute 'id'
**【Question.1】**これはsaveメソッドの戻り値を返す仕様(戻り値のオブジェクト)にオリジナルの主キーを返す仕様になっていないためかと思っているのですが、認識の誤りはありませんでしょうか。
※abc_idを設定せず、print(form.id)と呼び出せば問題なく主キーが返ってくる
saveメソッド呼び出し時の主キーを確認したいといった意向は
「登録時のログにレコードの主キーを表示させたい」や
「リレーションされた複数のテーブルに同時に登録する」などといった機能を作るうえで、とても一般的なものだと思います。
**【Question.2】**主キーを自作するたびに、saveメソッドをオーバーライドする必要があるのでは無駄に手間がかかってしまいます。
つまりDjangoでは自前の主キーを設定させることは推奨されないといったことでしょうか
どのテーブルの主キーも一律に'id'であると、リレーションテーブル間のやりとりなど、わかりにくくなりそうですが、皆さんはどのように試行錯誤されていますか。
回答1件
あなたの回答
tips
プレビュー