我如何设置像id
这样的东西,它是唯一的,并在创建对象后生成?
我想为每个对象分配标识符,这样user
就可以通过这个id来识别产品,但我不希望它是常规的自动增量id,因为我希望它由10位数字组成。(我的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"))
一种可能的方法是创建一个post_save
signal
,它将生成随机的10位数,然后检查唯一性,但这可能是非常耗时的解决方案。
发布于 2016-05-20 17:03:21
您可以改用UUIDField:
用于存储通用唯一标识符的字段。使用Python的UUID类。在PostgreSQL上使用时,它以uuid数据类型存储,否则以char(32)存储。
通用唯一标识符是用于primary_key的AutoField的一个很好的替代方案。数据库不会为您生成UUID,建议使用default:
import uuid
from django.db import models
class MyUUIDModel(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
# other fields
你没有提到使用过的here,但是PostgreSQL对UUID有更好的支持,你可以阅读更多的RDMBS。
https://stackoverflow.com/questions/37342321
复制相似问题