[解決済み] Django のモデルで UUID を主キーとして使う (一般的な関係への影響)
2022-11-18 09:18:13
質問
様々な理由から^、私の Django モデルのいくつかで主キーとして UUID を使いたいと思っています。そうすると、 "contrib.comments" や "django-voting" や "django-tagging" など、 ContentType による一般的な関係を使う外部アプリはまだ使えるでしょうか?
"django-voting" を例として、Vote モデルは以下のようになります。
class Vote(models.Model):
user = models.ForeignKey(User)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
object = generic.GenericForeignKey('content_type', 'object_id')
vote = models.SmallIntegerField(choices=SCORES)
このアプリは、投票対象のモデルの主キーが整数であると想定しているようです。
組み込みのコメントアプリは、非整数のPKを扱うことができるようですが。
class BaseCommentAbstractModel(models.Model):
content_type = models.ForeignKey(ContentType,
verbose_name=_('content type'),
related_name="content_type_set_for_%(class)s")
object_pk = models.TextField(_('object ID'))
content_object = generic.GenericForeignKey(ct_field="content_type", fk_field="object_pk")
この "integer-PK-assumed" 問題は、UUID を使用するのが面倒なサード パーティ製アプリによくある状況でしょうか。それとも、もしかしたら、私がこの状況を誤解しているのでしょうか?
Django で、あまり問題を起こさずに UUID を主キーとして使用する方法はあるでしょうか?
^ いくつかの理由は、オブジェクト数の隠蔽、URL "IDクローリングの防止、競合しないオブジェクトを作成するための複数サーバーの使用、などです。
どのように解決するのですか?
UUID主キーは、一般的な関係だけでなく、一般的な効率の問題を引き起こします。すべての外部キーは、保存と結合の両方において、マシン語よりもかなり高価になります。
しかし、何もUUIDを主キーにする必要はありません。
セカンダリ
を持つ uuid フィールドでモデルを補完することで、キーにすればよいのです。
unique=True
. 暗黙の主キーを通常通り (システム内部で) 使用し、UUID を外部識別子として使用します。
関連
-
Django でチェックボックスの値を取得する方法
-
6.5、Django - モデルでJSONFieldを使用してJSONフィールドでMySQLテーブルを作成する
-
Django ForeignKey逆引きクエリにおけるfilterと_setの効率比較
-
[解決済み] Sqliteの複数カラムの主キー
-
[解決済み] postgres の主キー配列が同期しなくなったときにリセットする方法は?
-
[解決済み] Django のモデルで on_delete は何をするのですか?
-
[解決済み] FastCGIとDjangoを使用しているnginxのエラーログはどこで見ることができますか?
-
[解決済み] Django のモデルで電話番号を保存する最良の方法は何ですか?
-
[解決済み] Djangoで複数のfilter()を連鎖させる、これはバグ?
-
[解決済み] django のユニットテストを複数のファイルに分散させるには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
django store to databaseは現地時間より8時間短い?(2021-05-12更新)
-
[解決済み] Django vs. Model View Controller [終了しました]。
-
[解決済み] Django のビューで 2 つ以上のクエリセットを結合するにはどうすればよいですか?
-
[解決済み] Django のカスタムフィールドで User モデルを拡張する
-
[解決済み] Django の修正 管理者の複数形
-
[解決済み] Django REST Framework: ModelSerializerに追加フィールドを追加する
-
[解決済み] Django のモデルで電話番号を保存する最良の方法は何ですか?
-
[解決済み] Django ORM のクエリセットに対応する SQL クエリを表示するには?
-
[解決済み] django : select_related と get_object_or_404 を一緒に使用する。
-
[解決済み] Django の日付テンプレートのデフォルトフォーマットを変更するには?