Django では、主キーは通常、自動インクリメントされる正の整数です。これは実際的なデフォルトとして機能しますが、データベース内の多数のエンティティが公開されるため、プライバシーが侵害される可能性があります。この問題に対処するには、特定の要件に準拠したカスタマイズされたソリューションが必要です。
Instagram で使用されているアプローチに触発された、適切なソリューションは、タイムスタンプとランダム ビットの組み合わせにより、一時的プロパティと一意のプロパティの両方を提供します。
ID 生成:
START_TIME = a constant representing a Unix timestamp. def make_id(): t = int(time.time() * 1000) - START_TIME u = random.SystemRandom().getrandbits(23) id = (t << 23) | u return id
モデル定義:
class MyClass(models.Model): id = models.BigIntegerField(default=make_id, primary_key=True)
このアプローチは、質問で概説されている特定の要件に対処しながら、一意の主キーを生成する安全かつ効率的な方法。さらに、reverse_id メソッドを実装して ID から作成時刻を取得できるため、追加のフィールドが不要になる可能性があります。
以上がDjango の自動インクリメント主キーを、特定のモデル用の一意の安全な整数 ID に置き換えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。