2015-09-11 135 views
12

我想爲我的Django對象獲取唯一的ID。在Django 1.8中,他們擁有UUIDField。我不確定如何使用此字段爲我的模型中的每個對象生成唯一的ID。如何在Django中使用UUID

以下是我對UUIDField

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。 。:(例如:

person = Person.objects.get(some_field = some_thing) 
id = person.unique_id.id 

ID,然後在給我相同的ID,每次有什麼不對,我怎麼解決這個問題謝謝你的幫助

回答

27

我不知道爲什麼你?! 。已經創建一個UUID模型可以直接添加uuid字段中的人物模型

class Person(models.Model): 
    unique_id = models.UUIDField(default=uuid.uuid4, editable=False, unique=True) 

然後,每個人都應該有一個唯一的ID。如果你想要的UUID是主鍵,你會怎麼做:

class Person(models.Model): 
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 

您當前的代碼尚未向該人員添加字段。它在創建MyUUIDModel()時創建了一個MyUUIDModel實例,並將其保存爲類屬性。這樣做沒有意義,每次加載models.py時都會創建MyUUIDModel。如果你真的想使用MyUUIDModel,你可以使用ForeignKey。然後每個人都會鏈接到一個不同的MyUUIDModel實例。

class Person(models.Model): 
    ... 
    unique_id = models.ForeignKey(MyUUIDModel, unique=True) 

但是,正如我前面所說,最簡單的方法是直接將UUID字段添加到該人。

3

您可以直接在Person模型id字段添加爲UUIDField。不需要單獨的MyUUIDModel

我認爲你已經與UUIDField example中使用的MyUUIDModel混淆,其中idUUIDField。您可以使用下面的代碼,它將使用UUIDs代替id

import uuid 
from django.db import models 

class Person(models.Model): 
    ... 
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 
2

您需要使用您創建的類的子類,聲明你的人模型時這樣的:

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): 
    ... 

這樣的人成爲MyUUIDModel的一個子類,並繼承其id字段的定義。

+0

這似乎捕捉到OP的意圖,我想呢? – simon