我想在我的模型中有一个字段,可以为每条记录自动创建一个唯一的主键。
我一直在使用:
models.AutoField(primary_key=True)
但这会生成简单的整数递增ID。
我真正喜欢的是某种随机的16位字母数字主键,它会自动生成并保证是唯一的。
实施此方法的最佳方法是什么?
答案 0 :(得分:2)
您想要创建UUID字段。这里的扩展名为django-uuidfield,https://github.com/dcramer/django-uuidfield应该有效。
使用pip install django-uuidfield安装后,您可以像这样添加字段:
from uuidfield import UUIDField
class MyModel(models.Model):
uuid = UUIDField(auto=True)
免责声明:代码来自github README。
答案 1 :(得分:2)
egreene的答案已经足够了,但是如果你想对模型的UUID有更多的控制权,你可以定义一个抽象基类,使用Python的内置函数自动分配一个唯一的UUID。
import uuid
from django.db import models
def make_uuid():
"""Return UUID4 string."""
return str(uuid4())
class UUIDModel(models.Model):
uuid = models.CharField(
editable=False, max_length=36, db_index=True,
unique=True, default=make_uuid
)
class Meta:
abstract = True
class RealModel(UUIDModel):
name = models.CharField(max_length=36)
def do_something(self):
pass
UUIDModel抽象基类也可以很容易地用作其他混合抽象类的一个组成部分,让你在制作新模型时混合搭配不同的属性。