Vì một số lý do ^, tôi muốn sử dụng UUID làm khóa chính trong một số mô hình Django của mình. Nếu tôi làm như vậy, liệu tôi có còn có thể sử dụng các ứng dụng bên ngoài như "Contrib.comments", "django-vote" hoặc "django-tagging" sử dụng quan hệ chung thông qua ContentType không?
Sử dụng "django-bỏ phiếu" làm ví dụ, mô hình Bỏ phiếu trông giống như sau:
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)
Ứng dụng này dường như đang giả định rằng khóa chính cho mô hình đang được bình chọn là một số nguyên.
Tuy nhiên, ứng dụng nhận xét tích hợp dường như có khả năng xử lý các PK không phải số nguyên:
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")
Vấn đề "số nguyên-PK-giả định" này có phải là tình huống phổ biến đối với các ứng dụng của bên thứ ba khiến việc sử dụng UUID trở nên khó khăn không? Hoặc, có thể, tôi đang hiểu sai tình huống này?
Có cách nào để sử dụng UUID làm khóa chính trong Django mà không gây ra quá nhiều rắc rối không?
^ Một số lý do: ẩn số lượng đối tượng, ngăn url "id thu thập thông tin", sử dụng nhiều máy chủ để tạo các đối tượng không xung đột, ...
default
.