2015-09-11 11 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インスタンスが作成され、それをクラス属性として保存しました。それは意味がありません。MyUUIDModelは、models.pyがロードされるたびに作成されます。本当にMyUUIDModelを使用したい場合は、ForeignKeyを使用できます。その後、それぞれの人は別のMyUUIDModelインスタンスにリンクします。

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

しかし、前述したように、最も簡単な方法は、UUIDフィールドを直接人に追加することです。

3

あなたは直接PersonモデルUUIDFieldようidフィールドを追加することができます。別途MyUUIDModelの必要はありません。

idUUIDFieldので使用されているMyUUIDModelと混同していると思います。以下のコードを使用するだけで、にはUUIDsが使用されます。

import uuid 
from django.db import models 

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

あなたはこのようなあなたのPersonモデルを宣言するときサブクラスとして作成したクラスを使用する必要があります:

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

関連する問題