Djangoオブジェクト。一意のIDを取得しようとしています。Django 1.8にはUUIDFieldがあります。モデル内の各オブジェクトの一意のID。
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をくれます。何が問題なのですか、どうすれば修正できますか?ご協力ありがとうございました!
UUIDモデルを作成した理由がわかりません。 uuidフィールドをPersonモデルに直接追加できます。
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フィールドを直接人に追加することです。
次のように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):
...
このようにして、PersonはMyUUIDModelのサブクラスになり、idフィールド定義を継承します。
id
フィールドをUUIDField
モデルの Person
として直接追加できます。別のMyUUIDModel
は必要ありません。
IDFieldの例 で使用されているMyUUIDModel
と混同していると思います。ここで、id
はUUIDField
です。以下のコードを使用するだけで、UUIDs
にid
を使用できます。
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 を参照してください。
ただし、既存のモデルに使用する場合(withunique = True)with dataそれに対応して、上記のドキュメントでは直接行うことはできません。 移行エラーが作成されます。データを失わずにこれを行うには、この Django Documentation のすべての手順を慎重に実行してください。