いくつかの理由で^、いくつかのDjangoモデルで主キーとしてUUIDを使用したいと思います。そうする場合でも、ContentTypeを介してジェネリックリレーションを使用する「contrib.comments」、「django-voting」、「django-tagging」などの外部アプリを使用できますか?
例として「django-voting」を使用すると、投票モデルは次のようになります。
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クロール」の防止、複数のサーバーを使用した競合しないオブジェクトの作成、...
default
。フィールドのとしてUUID生成関数を指定するだけです。