2016-05-20 6 views
0

idのように、オブジェクトを作成した後に一意で生成されるように設定するにはどうすればよいですか?任意のidのようなキーを設定するには?

各オブジェクトに識別子を割り当てて、userがこのIDで製品を識別できるようにしたいと思いますが、私はそれを10桁の数字で構成したいので、通常の自動インクリメントIDにしたくありません。 (私のpkは1,2...infです)。

私がこれまで行ってきたことは、名前のハッシュを作成しようとしたことですが、それを行うには良い方法ではありません。

class Job(models.Model): 
    job_id = models.BigIntegerField() # or hash(something) 
    customer = models.ForeignKey(User, related_name='orders', help_text=_("Customer"), on_delete=models.CASCADE) 
    translator = models.ForeignKey(User, related_name='jobs', null=True, blank=True, help_text=_(u"Translator")) 
    price = models.FloatField(null=True, blank=True, help_text=_(u"Price")) 

1つの可能な方法は、ランダムな10桁の番号を生成して、一意性をチェックしますpost_savesignalを作成することですが、それはおそらく非常にソリューションを消費しています。

答えて

0

代わりUUIDFieldを使用することができます。

フィールドを普遍的に一意の識別子を格納します。 PythonのUUID クラスを使用します。 PostgreSQLで使用する場合は、uuidデータ型である をchar(32)に格納します。

primary_keyの場合、汎用的に一意の識別子がAutoFieldに代わる良い方法です。

import uuid 
from django.db import models 

class MyUUIDModel(models.Model): 
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 
    # other fields 

あなたはRDMBSを使用言及しなかったが、PostgreSQLはUUIDのためのより良いサポートを持っている、あなたはhere詳細を読むことができます:それはデフォルトを使用することをお勧め あるので、データベースには、あなたのためのUUIDを生成しません。

+0

プロジェクトが進行中ですので、私はidとuuidを混乱させたくありません。私はちょうどPK、ユニークな、ユーザーのための識別子ではないです。それで、私はprimary_keyをユニークに変更する必要がありますか? –

+0

私はそれを取得しません。あなたは代替案について尋ねました、ここにあります。主キーは常に一意で、[ここ](http://stackoverflow.com/questions/30911898/mysql-is-primary-key-unique-by-default)を参照してください。 – arogachev

+0

両方を混ぜることはお勧めしません。 idまたはuuidのどちらかを使用する方が良いです。 – arogachev

関連する問題