实现UUID作为主键

我需要实现UUID作为主键,但我不知道如何在Django中完成。

我的代码

class LinkRenewAd(models.Model): # This model will generate the uuid for the ad renew link
    def make_uuid(self):
        return str(uuid.uuid1().int>>64)

    uuid = models.CharField(max_length=36, primary_key=True, default=make_uuid, editable=False)
    main = models.ForeignKey(Main)
    expiration_date = models.DateTimeField()
    date_inserted = models.DateTimeField(auto_now_add=True)
    date_last_update = models.DateTimeField(auto_now=True)   

当我尝试在南部生成这个新模型时,我得到了错误:

TypeError: make_uuid() takes exactly 1 argument (0 given)

Django 1.8带有一个内置的UUID字段

例:

import uuid
from django.db import models

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

self意味着你需要通过一个实例。 在你的情况下,你没有一个实例,这就是为什么你看到一个缺少参数的奇怪错误。

要解决您的问题,请将生成模型类的字段的方法移出:

def make_uuid():
    return str(uuid.uuid1().int>>64)

class Foo(models.Model):
    id = models.CharField(max_length=36, primary_key=True, default=make_uuid)

但是,这不是理想的解决方案。 最好创建一个自定义数据库字段。 由于这是一个常见问题,因此有许多版本。 我个人喜欢大卫克莱默的版本。


你是绕过功能,这将被调用在某处models.Charfield ,而不是从某些对象LinkRenewAd ,所以没有任何对象(实例self )传递给这个方法,这实际上期望之一。 因此,请将其设置为静态函数或lambda函数,或将其定义为该类的非成员。

链接地址: http://www.djcxy.com/p/55143.html

上一篇: Implementing UUID as primary key

下一篇: How to declare a static attribute in Python?