how to use UUID in Django
我正在尝试为我的Django对象获取唯一的ID。 在Django 1.8中,它们具有UUIDField。 我不确定如何使用此字段来为模型中的每个对象生成唯一的ID。
这是我的UUIDField
1 2 3 4 5 6 7 8 9 | import uuid from django.db import models class MyUUIDModel(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) class Person(models.Model): ... unique_id = MyUUIDModel() |
我可以重现UUID模型的ID,但是每次我都得到完全相同的ID。 :(。 例如:
1 2 | person = Person.objects.get(some_field = some_thing) id = person.unique_id.id |
id然后每次都给我相同的id。 有什么问题,我该如何解决? 谢谢您的帮助!
我不确定为什么要创建UUID模型。您可以将uuid字段直接添加到Person模型。
1 2 | class Person(models.Model): unique_id = models.UUIDField(default=uuid.uuid4, editable=False, unique=True) |
每个人都应该有一个唯一的ID。如果您希望将uuid用作主键,则可以执行以下操作:
1 2 | class Person(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) |
您当前的代码尚未向此人添加字段。当您执行MyUUIDModel()时,它已创建一个
1 2 3 | class Person(models.Model): ... unique_id = models.ForeignKey(MyUUIDModel, unique=True) |
但是,正如我之前所说,最简单的方法是将UUID字段直接添加到人员。
在声明您的Person模型时,需要使用创建的类作为子类:
1 2 3 4 5 6 7 8 | import uuid from django.db import models class MyUUIDModel(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) class Person(MyUUIDModel): ... |
这样,Person成为MyUUIDModel的子类,并将继承其id字段定义。
您可以将
我认为您已经将其与UUIDField示例中使用的
1 2 3 4 5 6 | import uuid from django.db import models class Person(models.Model): ... id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) |
要将Django中的UUID用于新模型,请参阅Django Docs。
但是,如果要将其用于具有与之对应的数据的现有模型(unique = True),则上述文档将无法直接进行处理。它将产生迁移错误。
要做到这一点而又不会丢失数据,请仔细阅读此Django文档中的所有步骤。