Implementing UUID as primary key
我需要实现UUID作为主键,但我不知道如何在Django中实现它。
我的密码
1 2 3 4 5 6 7 8 9 | 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) |
当我尝试在南方生成这个新模型时,我得到了错误:
1 | TypeError: make_uuid() takes exactly 1 argument (0 given) |
Django 1.8带有内置UUID字段
例子:
1 2 3 4 5 | import uuid from django.db import models class MyUUIDModel(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) |
要解决问题,请将生成字段的方法移出模型类:
1 2 3 4 5 | 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) |
然而,这不是理想的解决方案。最好创建一个自定义数据库字段。因为这是一个常见的问题,所以有很多版本。我个人喜欢大卫·克莱默的版本。
您正在传递函数around,它将在