在django中创建更复杂的模型autofield的最佳方法是什么?

时间:2014-08-08 18:21:33

标签: python django

我想在我的模型中有一个字段,可以为每条记录自动创建一个唯一的主键。

我一直在使用:

models.AutoField(primary_key=True)

但这会生成简单的整数递增ID。

我真正喜欢的是某种随机的16位字母数字主键,它会自动生成并保证是唯一的。

实施此方法的最佳方法是什么?

2 个答案:

答案 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抽象基类也可以很容易地用作其他混合抽象类的一个组成部分,让你在制作新模型时混合搭配不同的属性。